RestSharp - игнорировать ошибки SSL
Есть ли способ заставить RestSharp игнорировать ошибки в сертификатах SSL? У меня есть тестовый клиент, и у службы, к которой я подключаюсь, еще нет действующего сертификата.
Когда я делаю запрос сейчас, я получаю ошибку:
The underlying connection was closed: Could not establish trust
relationship for the SSL/TLS secure channel.
заранее спасибо
/Майкл
Обновить:
Я закончил тем, что использовал:
ServicePointManager.ServerCertificateValidationCallback +=
(sender, certificate, chain, sslPolicyErrors) => true;
4 ответа
Как предположил Джон:
ServicePointManager.ServerCertificateValidationCallback +=
(sender, certificate, chain, sslPolicyErrors) => true;
Вы можете установить его в своем объекте
var restClient = new RestClient(baseUrl);
restClient.RemoteCertificateValidationCallback =
(sender, certificate, chain, sslPolicyErrors) => true;
Есть лучшее решение, чем модификация вашего кода. В идеале вам нужно решение, которое будет имитировать условия, которые вы увидите в рабочей среде, и изменение кода не сделает этого и может быть опасным, если вы забудете извлечь код перед его развертыванием.
Вам понадобится какой-либо самозаверяющий сертификат. Если вы используете IIS Express, у вас уже будет один из них, вам просто нужно его найти. Если у вас его еще нет, откройте Firefox или любой другой браузер и перейдите на свой веб-сайт. Вы должны иметь возможность просматривать информацию о сертификате в строке URL, и в зависимости от вашего браузера вы сможете экспортировать сертификат.
Затем откройте MMC.exe и добавьте оснастку "Сертификат". Импортируйте файл сертификата в хранилище доверенных корневых центров сертификации, и это все, что вам нужно.
Теперь ваш компьютер в целом будет неявно доверять любым сертификатам, которые он сам сгенерировал, и вам не нужно будет добавлять код для этой особой обработки. Когда вы перейдете к производству, он продолжит работать, если на нем установлен правильный действительный сертификат.
Для последней версии RestSharp (v110.2.0):
var options = new RestClientOptions("https://example.com");
options.RemoteCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;
var client = new RestClient(options);
var request = new RestRequest();
var response = await client.GetAsync(request);