Не удалось установить безопасный канал для SSL / TLS с полномочиями"*"
Я должен использовать веб-сервис PHP, который имеет сертификат SSL. Моя библиотека классов .net 3.5 ссылается на веб-сервис с помощью "добавить ссылки на службы" в Visualstudio 2010 (WCF правильно?).
при вызове основного метода веб-сервиса я получаю;
не удалось установить безопасный канал для SSL / TLS с полномочиями " {base_url_of_WS}".
Я много пробовал, как
System.Net.ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
public bool CheckValidationResult(Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
}
но это не сработает. Также у меня есть сертификат установлен на моей машине.
* дополнительная информация; когда я использую местоположение wsdl в "Add service reference", возникает та же ошибка. Прежде чем попробовать, я работал со статическим wsdl.
8 ответов
да ненадежный сертификат может вызвать это. Посмотрите путь сертификата для webservice, открыв websservice в браузере и используйте инструменты браузера, чтобы посмотреть путь сертификата. Возможно, потребуется установить один или несколько промежуточных сертификатов на компьютер, вызывающий веб-службу. В браузере вы можете увидеть " ошибки сертификата "с опцией" Установить сертификат " при дальнейшем расследовании - это может быть сертификат, который вам не хватает.
мой особой проблемой был промежуточный сертификат GeoTrust Geotrust DV SSL CA, отсутствующий после обновления до корневого сервера в июле 2010
https://knowledge.geotrust.com/support/knowledge-base/index?page=content&id=AR1422
Это была точная проблема, с которой я столкнулся. В какой-то другой статье я получил подсказку изменить конфигурацию. Для меня это работает:
<bindings>
<basicHttpBinding>
<binding name="xxxBinding">
<security mode="Transport">
<transport clientCredentialType="Certificate"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
У нас была эта проблема на новом веб-сервере .страницы aspx, вызывающие веб-сервис. Мы не дали разрешения пользователю пула приложений на сертификат машины. Проблема была исправлена после того, как мы предоставили разрешение пользователю пула приложений.
в случае, если это помогает кому-либо еще, используя новый Microsoft Web Service Reference Provider tool, что для .NET Standard и .NET Core, мне пришлось добавить следующие строки в определение привязки, как показано ниже:
result.Security.Mode = BasicHttpSecurityMode.Transport;
result.Security.Transport = new HttpTransportSecurity{ClientCredentialType = HttpClientCredentialType.Certificate};
это фактически то же самое, что и ответ Михи, но в коде, поскольку нет файла конфигурации.
вот что исправлено для меня:
1) Убедитесь, что вы используете Visual Studio как администратор
2) Установите и запустите winhttpcertcfg.exe для предоставления доступа
https://msdn.microsoft.com/en-us/library/windows/desktop/aa384088(v=vs. 85).aspx
команда похожа на приведенную ниже: (введите тему сертификата и имя службы)
winhttpcertcfg -g -c LOCAL_MACHINE\MY -s "certificate subject" -a "NetworkService"
winhttpcertcfg -g -c LOCAL_MACHINE\MY -s "certificate subject" -a "LOCAL SERVICE"
winhttpcertcfg -g -c LOCAL_MACHINE\MY -s "certificate subject" -a "My Apps Service Account"
была такая же ошибка с кодом:
X509Certificate2 mycert = new X509Certificate2(@"C:\certificate.crt");
решено путем добавления пароля:
X509Certificate2 mycert = new X509Certificate2(@"C:\certificate.crt", "password");