Обход неверных ошибок сертификата SSL при вызове веб-служб в .Net

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

Подключенное соединение было закрыто: не удалось установить доверительные отношения для защищенного канала SSL/TLS.

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

Удаленный сертификат недействителен в соответствии с процедурой проверки.

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

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

Ответ 1

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

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

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

Ответ 2

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

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

static bool MyCertHandler(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors error)
{
// Ignore errors
return true;
}

Ответ 3

Как и Джейсон С ответ:

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

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

Ответ 4

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

Вызовите следующее непосредственно перед вызовом веб-службы ssl, которая вызывает эту ошибку:

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;
        };
}

Ответ 5

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

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

Ответ 6

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

будет обходить invaild ssl. Напишите его конструктору веб-службы.

Ответ 7

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

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

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

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

Ответ 8

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