Не удалось установить безопасный канал для SSL / TLS для вызова SOAP - PullRequest
10 голосов
/ 21 октября 2010

Наш главный сервер обращается к мыльной веб-службе через https на нескольких разных серверах, чтобы подтвердить, что транзакция завершена.

Код - dotnet 3.5 (vb), он работает для различных сервисов обратного вызова, которые мы настроили, пока мы только не перевели новую в производство, и она отказывается общаться, выдавая следующую ошибку:

Unhandled Exception: System.ServiceModel.Security.SecurityNegotiationException:
Could not establish secure channel for SSL/TLS with authority 'www.xyzzy.com'.
---> System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel.
at System.Net.HttpWebRequest.GetResponse()
at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)

Соответствующий фрагмент кода выглядит так:

Dim epAddr As New System.ServiceModel.EndpointAddress(sys.CallbackAddress)
Dim bind As New System.ServiceModel.BasicHttpBinding(ServiceModel.BasicHttpSecurityMode.Transport)

_svc = New CallbackSvc.XyzzyCallbackSoapClient(bind, epAddr)

С моего личного ноутбука (WinXP) я могу запустить код, и он без проблем подключается к новому серверу.

На главном сервере (который вызывает все службы обратного вызова) (Windows Server Enterprise Service Pack 1) код всегда приводит к вышеупомянутой ошибке SSL.

После поиска проблемы я попытался добавить следующую строку (конечно, не подходит для производства, но я хотел проверить):

System.Net.ServicePointManager.ServerCertificateValidationCallback = Function(se As Object, cert As System.Security.Cryptography.X509Certificates.X509Certificate, chain As System.Security.Cryptography.X509Certificates.X509Chain, sslerror As System.Net.Security.SslPolicyErrors) True

Результат был таким же. Ошибка SSL все еще произошла.

В других местах предполагается, что корневой сертификат не был правильно установлен на вызывающем компьютере, но как новый сервер, так и старые серверы обратного вызова используют сертификаты, выпущенные Go Daddy, поэтому я не думаю, что это так.

Ответы [ 3 ]

9 голосов
/ 22 октября 2010

Оказалось, что это взаимодействие между рабочим «основным» сервером (вызывающим службу) и целевым сервером (размещающим службу), не использующим приемлемый алгоритм https. wfetch был чрезвычайно полезен при диагностике проблемы.

Оказалось, что целевой сервер не был настроен на прием TLS 1.0, был принят только SSL 3.0.

Очевидно,что-то изменилось в Windows 2008 Server, что означает, что исходящие соединения https будут приемлемы только с использованием TLS 1.0 (или лучше, предположительно).

В нашем случае проблема была решена, когда конфигурация на конечном сервере была изменена напринять TLS.Такое ощущение, что должен быть способ изменить мою программу, чтобы заставить ее использовать SSL, но я не нашел ее.

6 голосов
/ 20 марта 2012

На стороне клиента попробуйте:

ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
3 голосов
/ 29 марта 2012

Я получил ту же ошибку «Не удалось установить безопасный канал для SSL / TLS с полномочиями« www.xyzzy.com ».» при перемещении существующего приложения, включая требуемый сертификат клиента, с одного сервера на другой. Причиной проблемы на новом сервере было то, что пользователь IIS, в данном случае «IIS_WPG», не имел разрешения на чтение и выполнение для сертификата, только что перемещенного на новый сервер. Изменить права доступа к сертификату можно с помощью wsetools. / Stefan

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...