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



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




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




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




пульт дистанционного управления сертификат недействителен в соответствии с процедурой проверки.




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



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

594   8  

8 ответов:

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

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

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

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

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

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

как ответ Джейсона S:

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

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

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

вызовите следующее непосредственно перед вызовом вашего веб-сервиса 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;
        };
}

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

System.Net.WebClient client = new System.Net.WebClient();            
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
string sHttpResonse = client.DownloadString(sUrl);
ServicePointManager.ServerCertificateValidationCallback +=
            (mender, certificate, chain, sslPolicyErrors) => true;

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

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

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

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

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

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

Comments

    Ничего не найдено.