Мы настраиваем новый SharePoint, для которого у нас еще нет действующего сертификата SSL. Я хотел бы вызвать на нем веб-службу Lists, чтобы получить некоторые метаданные о настройке. Однако при попытке сделать это получаю исключение:
Базовое соединение было закрыто: не удалось установить доверительные отношения для безопасного канала SSL / TLS.
Вложенное исключение содержит сообщение об ошибке:
Удаленный сертификат недействителен согласно процедуре проверки.
Это правильно, поскольку мы используем временный сертификат.
Мой вопрос: как я могу сказать клиенту веб-службы .Net ( SoapHttpClientProtocol ) игнорировать эти ошибки?
источник
В качестве альтернативы вы можете зарегистрировать делегата обратного вызова, который игнорирует ошибку сертификации:
... ServicePointManager.ServerCertificateValidationCallback = MyCertHandler; ... static bool MyCertHandler(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors error) { // Ignore errors return true; }
источник
Как и ответ Джейсона С.
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
Я помещаю это в свой Main, смотрю на свой
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, для его интеграции.
источник
Чтобы еще больше расширить пост Саймона Джонсона: в идеале вам нужно решение, которое имитирует условия, которые вы увидите в производственной среде, и изменение вашего кода не будет делать этого и может быть опасным, если вы забудете вынуть код перед его развертыванием.
Вам понадобится какой-то самоподписанный сертификат. Если вы используете IIS Express, у вас уже есть один из них, вам просто нужно его найти. Откройте Firefox или любой другой браузер, который вам нравится, и перейдите на свой сайт разработчика. Вы должны иметь возможность просматривать информацию о сертификате из строки URL, и в зависимости от вашего браузера вы сможете экспортировать сертификат в файл.
Затем откройте MMC.exe и добавьте оснастку «Сертификат». Импортируйте файл сертификата в хранилище доверенных корневых центров сертификации, и это все, что вам нужно. Важно убедиться, что он попадает в этот магазин, а не в какой-то другой, например «Личный». Если вы не знакомы с MMC или сертификатами, существует множество веб-сайтов с информацией о том, как это сделать.
Теперь ваш компьютер в целом будет неявно доверять любым сертификатам, которые он сгенерировал сам, и вам не нужно будет добавлять код для специальной обработки этого. Когда вы перейдете к производству, он продолжит работать, если у вас установлен правильный действующий сертификат. Не делайте этого на рабочем сервере - это будет плохо, и это не будет работать ни с какими другими клиентами, кроме тех, что находятся на самом сервере.
источник