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

StackOverflow https://stackoverflow.com/questions/4492735

Вопрос

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

System.net.webexception Основное соединение было закрыто: не мог установить доверительные отношения для безопасного канала SSL/TLS.

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

System.Net.ServicePointManager.ServerCertificateValidationCallback = (senderX, certificate, chain, sslPolicyErrors) => { return true; };

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

   System.Net.ServicePointManager.ServerCertificateValidationCallback = Function(senderX, certificate, chain, sslPolicyErrors)
                                                                             Return True
                                                                         End Function

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top