Не удалось установить безопасный канал для 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.



текст Alt

1284   8  

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, вызывающие веб-сервис. Мы не давали разрешения пользователю пула приложений на сертификат машины. Проблема была исправлена после того, как мы предоставили разрешение пользователю пула приложений.

Убедитесь, что вы запускаете Visual Studio от имени администратора.

В случае, если это поможет кому-то еще, используя новый инструмент 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

    Ничего не найдено.