WebException Не удалось установить доверительные отношения для безопасного канала SSL / TLS - PullRequest
5 голосов
/ 20 декабря 2010

Моя компания разработала веб-сервис .NET и клиентскую DLL, которая использует этот веб-сервис. Веб-сервис размещается на нашем сервере через ssl, и сертификат предоставляется и подписывается GoDaddy. У нас есть клиенты в размещенной среде, которые получают следующее сообщение об ошибке от клиента dll при попытке доступа к нашему веб-сервису.

System.Net.WebException Базовое соединение было закрыто: не удалось установить доверительные отношения для безопасного канала SSL / TLS.

Наше исправление заключается в том, чтобы они открывали IE на сервере, что само по себе является проблемой для многих размещенных сервисов, и переходило на URL WSDL. IE затем предлагает их с диалоговым окном предупреждения безопасности. В нем говорится, что дата сертификата действительна, и действительное имя соответствует названию страницы, но было выпущено компанией, которой вы не доверяли. Когда они нажимают Да, чтобы продолжить, клиентская библиотека может затем успешно подключиться к веб-службе и работать в обычном режиме.

Кто-нибудь знает, почему GoDaddy не было бы в списке действительных издателей? На всех запущенных нами серверах GoDaddy имеет действительные полномочия. Я полагаю, по соображениям безопасности, они удалили полномочия для GoDaddy, но не полностью убеждены, что нет какой-то другой основной проблемы.

К сожалению, мне не повезло, пытаясь воссоздать это локально. Если я захожу в Свойства обозревателя и удаляю права доступа GoDaddy и нажимаю на наш сервис, ssl работает просто отлично. Я возвращаюсь в список издателей, и GoDaddy возвращается обратно. Итак, мой второй вопрос: Как, черт возьми, вы избавляетесь от GoDaddy, чтобы я мог получить предупреждение о недействительном сертификате?

Хорошо, последний вопрос. Есть ли способ в коде, который я могу сказать веб-службе игнорировать недействительные сертификаты. Я видел несколько сообщений о том, как делать это программно с WCF, но не со старыми веб-сервисами.

Ответы [ 5 ]

28 голосов
/ 06 августа 2013

Я исправил эту ошибку, добавив эту строку перед вызовом веб-метода:

System.Net.ServicePointManager.ServerCertificateValidationCallback = (senderX, certificate, chain, sslPolicyErrors) => { return true; };
5 голосов
/ 20 декабря 2010

Возможно, вам придется установить на своих серверах промежуточные сертификаты, используемые для подписи ваших сертификатов SSL.

Браузеры попытаются проверить сертификат SSL, проверив проверку цепочки сертификатов, подписавших сертификат SSL.Если сервер не предоставляет цепочку сертификатов с сертификатом SSL, браузер может отклонить сертификат SSL.(Больше проблем для Firefox, чем для IE).Чтобы все это работало, на клиентском компьютере должен быть установлен корневой сертификат.

2 голосов
/ 05 ноября 2015

VB.NET эквивалент

   System.Net.ServicePointManager.ServerCertificateValidationCallback = Function(senderX, certificate, chain, sslPolicyErrors)
                                                                             Return True
                                                                         End Function
1 голос
/ 13 февраля 2012

Когда вы смотрите на путь сертификации Go Daddy этого сертификата на веб-сервере, вы видите Go Daddy Class xxx или Starfield Class xxx?

И от вашего не унаследованного клиента, то есть Windows Vista и выше,что показывает путь сертификации Go Daddy?Go Daddy Class xxx или Starfield Class xxx?

И эти клиенты, которые получают предупреждение, являются ли они устаревшими клиентами?т. е. WinXP и старше?

Обновления корневых сертификатов работают иначе, чем в Windows Vista.

http://support.microsoft.com/kb/931125

Корневые сертификаты в Windows Vista и более поздних версиях распространяются через автоматическое обновление rootмеханизм - то есть для каждого корневого сертификата.Когда пользователь посещает защищенный веб-сайт (с использованием протокола HTTPS SSL), читает защищенную электронную почту (S / MIME) или загружает элемент управления ActiveX с подписью (подписывание кода) и обнаруживает новый корневой сертификат, программное обеспечение для проверки цепочки сертификатов Windowsпроверяет Microsoft Update на наличие корневого сертификата.Если он находит его, он загружает текущий список доверия сертификатов (CTL), содержащий список всех доверенных корневых сертификатов в Программе, и проверяет, что там есть корневой сертификат;затем он загружает указанный корневой сертификат в систему и устанавливает его в хранилище доверенных корневых центров сертификации Windows.

Вы, вероятно, обнаружите, что ваш путь сертификации Go Daddy на веб-сервере считает его Starfield Class 2 вместоGo Daddy Class 2, чтобы вы установили неправильный корневой сертификат.Это застало меня врасплох: когда вы просматриваете веб-сервер, он не отображает предупреждение о корневом сертификате, загружает и устанавливает корневой сертификат Do Daddy класса 2 и удаляет Starfield, и ваша проблема должна исчезнуть.

1 голос
/ 20 декабря 2010

Это действительно больше вопрос о сбое сервера, но я добавлю, что я могу здесь.

Список корневых сертификатов, которым обычно доверяют машины Windows, обновляется довольно регулярно. Это происходит как обновление Windows для IE. Вы можете увидеть MSDN для получения дополнительной информации .

Если на ваших клиентах не включено обновление Windows или они активно игнорируют обновления Windows, что, к сожалению, очень часто для многих ИТ-отделов, то вы мало что можете сделать, кроме как переключить поставщиков SSL.

По сути, им необходимо получать обновления сертификатов, или вам нужно переключиться на поставщика сертификатов, который с высокой вероятностью уже пользуется доверием рассматриваемых компьютеров. Обычно это означает Verisign или Thawte . Третий вариант - маршрут, по которому вы идете: пусть они вручную доверяют корневому CA.

В конце концов, я ненавижу идею менять приложение таким образом просто потому, что рассматриваемые ИТ-отделы - дебилы, но реальный вопрос сводится к тому, как ваша компания хочет справиться с этим.

...