Не удалось установить безопасный канал для SSL / TLS с полномочиями '*' - PullRequest
18 голосов
/ 16 декабря 2010

Я должен использовать веб-сервис 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 в «Добавить ссылку на службу», возникает та же ошибка. До того, как я попробовал это, я работал со статическим wsdl.

alt text

Ответы [ 9 ]

23 голосов
/ 13 сентября 2013

Это была именно та проблема, с которой я столкнулся.В какой-то другой статье я получил подсказку, чтобы изменить конфигурацию.Для меня это работает:

<bindings>
  <basicHttpBinding>
    <binding name="xxxBinding">
      <security mode="Transport">
        <transport clientCredentialType="Certificate"/>
      </security>
    </binding>
  </basicHttpBinding>
</bindings>
10 голосов
/ 18 июля 2018

Задача

Я сталкивался с тем же сообщением об ошибке при вызове стороннего API из моего проекта ASP.NET Core MVC.

Не удалось установить безопасный канал для SSL / TLS с полномочиями '{Base_url_of_WS}'.

Решение

Оказалось, что стороннему API-серверу требуется TLS 1.2. Чтобы решить эту проблему, я добавил следующую строку кода в конструктор моего контроллера:

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
10 голосов
/ 12 января 2011

Да, это может быть вызвано ненадежным сертификатом.Посмотрите на путь сертификата для веб-службы, открыв веб-службу в браузере, и используйте инструменты браузера для просмотра пути сертификата.Вам может потребоваться установить один или несколько промежуточных сертификатов на компьютер, вызывающий веб-службу.В браузере вы можете увидеть «Ошибки сертификата» с опцией «Установить сертификат» при дальнейшем расследовании - это может быть сертификат, который вы пропустили.

Моя конкретная проблема - отсутствие промежуточного сертификата Geotrust Geotrust DV SSL CA CAпосле обновления до корневого сервера в июле 2010 года

https://knowledge.geotrust.com/support/knowledge-base/index?page=content&id=AR1422

3 голосов
/ 23 июля 2015

Эта проблема возникла на новом веб-сервере со страниц .aspx, который называет веб-сервис.Мы не дали разрешения пользователю пула приложений на сертификат компьютера.Эта проблема была исправлена ​​после того, как мы предоставили разрешение пользователю пула приложений.

1 голос
/ 27 февраля 2018

В случае, если это кому-то поможет, с помощью нового инструмента поставщика веб-служб Microsoft , предназначенного для .NET Standard и .NET Core, мне пришлось добавить следующие строки в определение привязки, как показано ниже :

binding.Security.Mode = BasicHttpSecurityMode.Transport;
binding.Security.Transport = new HttpTransportSecurity{ClientCredentialType = HttpClientCredentialType.Certificate};

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

Таким образом, чтобы связать привязку с экземпляром веб-службы, я сделал это:

 System.ServiceModel.BasicHttpBinding binding = new System.ServiceModel.BasicHttpBinding();
 binding.Security.Mode = System.ServiceModel.BasicHttpSecurityMode.Transport;
 binding.Security.Transport.ClientCredentialType = System.ServiceModel.HttpClientCredentialType.Certificate;
 var client = new WebServiceClient(binding, GetWebServiceEndpointAddress());

Где WebServiceClient - это правильное имя вашего веб-сервиса, как вы его определили.

1 голос
/ 18 ноября 2014

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

0 голосов
/ 16 апреля 2019

Эта ошибка может возникать по многим причинам, и в прошлый раз я решил ее, изменив файл Reference.svcmap и изменив ссылку на файл WSDL.

Исключение:

<MetadataSource Address="C:\Users\Me\Repo\Service.wsdl" Protocol="file" SourceId="1" />
<MetadataFile FileName="Service.wsdl" ... SourceUrl="file:///C:/Users/Me/Repo/Service.wsdl" />

Работает нормально:

<MetadataSource Address="https://server.domain/path/Service.wsdl" Protocol="http" SourceId="1" />
<MetadataFile FileName="Service.wsdl" ... SourceUrl="https://server.domain/path/Service.wsdl" />

Это кажется странным, но я воспроизвел его.Это было в консольном приложении на .NET 4.5 и 4.7, а также на сайте .NET WebAPI на 4.7.

0 голосов
/ 14 декабря 2016

Произошла та же ошибка с кодом:

X509Certificate2 mycert = new X509Certificate2(@"C:\certificate.crt");

Решено добавлением пароля:

X509Certificate2 mycert = new X509Certificate2(@"C:\certificate.crt", "password");
0 голосов
/ 24 ноября 2015

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

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"
...