Не удалось установить безопасный канал для SSL / TLS с полномочиями'*'
Я должен использовать веб-сервис PHP, который имеет сертификат SSL. Моя библиотека классов .net 3.5 ссылается на веб-сервис с помощью "Add Service references" в 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 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};Это фактически то же самое, что и ответ Михи, но в коде, поскольку нет файла конфигурации.
Задача
Я столкнулся с тем же сообщением об ошибке при вызове стороннего API из моего проекта MVC.
Не удалось установить безопасный канал для SSL / TLS с полномочиями "{base_url_of_WS}".
Решение
Оказалось, что сторонний API-сервер требует TLS 1.2. Чтобы решить эту проблему, я добавил следующую строку кода в конструктор моего контроллера:
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
Вот что зафиксировано для меня:
1) Убедитесь, что вы используете Visual Studio от имени администратора
2) Установите и запустите winhttpcertcfg.exe для предоставления доступа
Https://msdn.microsoft.com/en-us/library/windows/desktop/aa384088 (v=против 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");
Comments