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

alt text

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


убедитесь, что вы запускаете 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};

это фактически то же самое, что и ответ Михи, но в коде, поскольку нет файла конфигурации.



вот что исправлено для меня:

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");