Вопрос по .net, web-services – Обход ошибок недействительного сертификата SSL при вызове веб-сервисов в .Net

82

Мы настраиваем новый SharePoint, для которого у нас еще нет действующего SSL-сертификата. Я хотел бы вызвать веб-сервис Lists для получения метаданных о настройке. Однако, когда я пытаюсь сделать это, я получаю исключение:

The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.

Вложенное исключение содержит сообщение об ошибке:

The remote certificate is invalid according to the validation procedure.

Это правильно, так как мы используем временный сертификат.

У меня вопрос: как я могу сказать клиенту веб-службы .Net (SoapHttpClientProtocol) игнорировать эти ошибки?

Ваш Ответ

8   ответов
1

Для новичков, Вы можете расширить свой частичный класс обслуживания в отдельный файл cs и добавить код, код которого предоставлен «imanabidi». чтобы интегрировать

1

Для дальнейшего расширения поста Саймона Джонсона - в идеале вам нужно решение, которое будет имитировать условия, которые вы увидите при производстве, и модификация кода не сделает этого и может быть опасной, если вы забудете удалить код перед его развертыванием.

Вам понадобится какой-либо самозаверяющий сертификат. Если вы используете IIS Express, у вас уже есть один из них, вам просто нужно его найти. Откройте Firefox или любой другой браузер, который вам нравится, и перейдите на сайт разработчика. Вы должны иметь возможность просматривать информацию о сертификате в строке URL, и в зависимости от вашего браузера вы сможете экспортировать сертификат в файл.

Затем откройте MMC.exe и добавьте оснастку «Сертификат». Импортируйте файл сертификата в хранилище доверенных корневых центров сертификации, и это все, что вам нужно. Важно убедиться, что он входит в этот магазин, а не в какой-либо другой магазин, такой как «Личный». Если вы не знакомы с MMC или сертификатами, существует множество веб-сайтов с информацией о том, как это сделать.

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

2
ServicePointManager.ServerCertificateValidationCallback +=
            (mender, certificate, chain, sslPolicyErrors) => true;

будет обходить вторженный ССЛ. Напишите это вашему конструктору веб-сервисов.

17

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

Обычно я делаю тестирование с сертификатами, созданными с помощью CACERT, и добавление их в мой список доверенных лиц работает без проблем.

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

Это была моя первая идея. К сожалению, срок действия сертификата также истек, поэтому его нельзя доверять. jan.vdbergh
Есть ли какая-либо причина, по которой вы не можете использовать кого-то вроде CA cert? Если это тестовый сертификат, то вы можете просто продолжить. Я не уверен, есть ли способ отключить эти проверки!
110

В качестве альтернативы вы можете зарегистрировать делегата обратного вызова, который игнорирует ошибку сертификации:

...
ServicePointManager.ServerCertificateValidationCallback = MyCertHandler;
...

static bool MyCertHandler(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors error)
{
// Ignore errors
return true;
}
Это все, что вам нужно сделать, если вы хотите быть уязвимым перед"Man in the Middle" атака...
Я добавил этот статический метод в global.asax и установил событие на «OnApplicationStart». работал как шарм. Спасибо
@JuanZamora Я сделал то же самое, что и ты. Это сработало!
В идеале вы должны делать это только в среде разработки.
21

Я решил это так:

Непосредственно перед вызовом вашего ssl webservice вызовите следующее:

using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;

/// <summary>
/// solution for exception
/// System.Net.WebException: 
/// The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.
/// </summary>
public static void BypassCertificateError()
{
    ServicePointManager.ServerCertificateValidationCallback +=

        delegate(
            Object sender1,
            X509Certificate certificate,
            X509Chain chain,
            SslPolicyErrors sslPolicyErrors)
        {
            return true;
        };
}
Святой% @ # $! ты спас мне жизнь с этим! СПАСИБО Иманабиди !!
+1 для добавления использования & amp; пространства имен :)
10

У меня была та же ошибка при использовании DownloadString; и смог сделать так, как показано ниже, с предложениями на этой странице

System.Net.WebClient client = new System.Net.WebClient();            
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
string sHttpResonse = client.DownloadString(sUrl);
73

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

Я положил это в свой главный и смотрю на мойapp.config и проверить, если(ConfigurationManager.AppSettings["IgnoreSSLCertificates"] == "True") перед вызовом этой строки кода.

Похожие вопросы