Я получаю исключение при попытке подключиться к серверу SOAP 1.1. Я получил WSDL из другой организации и использовал .net, чтобы привести это в свой проект в качестве справочника службы.Неверная ошибка удаленного сертификата До ServerCertificateValidationCallback называется
Необходимо, чтобы мы использовали приложение MTOM и HTTP gzip compression. Он также требует безопасности веб-служб (WS-Security) версии 1.0 (с использованием стандарта OASIS) для обеспечения сквозной безопасности с использованием инфраструктуры проверки подлинности X.509.
Я работаю в C# с рамкой 4.5.2 .Net.
Вот соответствующие разделы моего app.config с потенциально чувствительной информации отредактирован:
<basicHttpBinding>
<binding name="customHttpBinding" allowCookies="true" messageEncoding="Mtom">
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="Certificate" />
<message clientCredentialType="Certificate" />
</security>
</binding>
</basicHttpBinding>
[snip]
<client>
<endpoint address="YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY"
binding="basicHttpBinding" bindingConfiguration="customHttpBinding"
contract="SERVICENAME.BulkRequestTransmitterPortType"
name="BulkRequestTransmitterPort">
<identity>
<certificateReference storeLocation="CurrentUser" x509FindType="FindBySerialNumber"
findValue="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" />
</identity>
</endpoint>
</client>
хз это серийный номер моего ключа (подтверждено, что в магазине моего компьютера) и Y является конечная точка
Вот раздел, в котором я создаю и вызвать службу (хз тот же сертификат):
var transmitter = new BulkRequestTransmitterPortTypeClient();
transmitter.ClientCredentials?.ClientCertificate.SetCertificate(
StoreLocation.CurrentUser,
StoreName.My,
X509FindType.FindBySerialNumber,
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
var response = transmitter.BulkRequestTransmitter(
securityHeader,
security,
ref businessHeader,
transmitterManifestReqDtl,
transmitterType);
дует на этой последней строке со следующей ошибкой:
ex {"Could not establish trust relationship for the SSL/TLS secure channel with authority 'YYYYYYYYYYYY'."} System.Exception {System.ServiceModel.Security.SecurityNegotiationException}
+InnerException {"The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel."} System.Exception {System.Net.WebException}
+InnerException {"The remote certificate is invalid according to the validation procedure."} System.Exception {System.Security.Authentication.AuthenticationException}
Всякий раз, когда я делаю поиск я нашел два предложения, первый должен был убедиться, что сертификат сервера в моем хранилище доверенных и авторитет третьей стороны доверяли. Я проверил, что оба находятся в моем локальном компьютере и доверяют. Второе и наиболее распространенное предложение было переопределить ServicePointManager.ServerCertificateValidationCallback с возвращением истинным, как это:
ServicePointManager.ServerCertificateValidationCallback = delegate (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
};
Как решается, как я должен был попробовать это (я не люблю использовать плохие методы даже в средах разработки) Я полагал, что использование в отладке будет стоить того. К сожалению, точка останова никогда не попадает. Я получаю ошибку до ServerCertificateValidationCallback срабатывает.
Я сейчас в растерянности. Я не уверен, что я делаю неправильно, поскольку каждое изменение, которое я делаю для конфигурации, создает ошибку в гораздо более ранней точке, поэтому я думаю, что я на правильном пути, но не уверен, почему процесс проверки не работает и как разрешить Это. Я был бы признателен за любую помощь, которая может быть оказана.
Я обязательно попробую использовать certutil, и я ценю ваше предложение. Тем не менее, я хочу указать, что я прямо сказал, что я получаю эту ошибку *** до того, как *** ServerCertificateValidationCallback отключится, как проверено, поставив точку останова в в return true. –
Я только что использовал certutil с сертификатом, которым я достаточно уверен, является удаленный сервер, и он прошел проверку. Я говорю разумно, потому что я получил сертификат через просмотр на веб-адрес и загрузку сертификата через мой клиентский браузер. Я отправил запрос на отправку моего публичного сертификата, но у меня нет больших надежд на ответ. –