RestSharp — игнорировать ошибки SSL

Есть ли способ заставить RestSharp игнорировать ошибки в SSL-сертификатах? У меня есть тестовый клиент, а служба, к которой я подключаюсь, еще не имеет действительного сертификата.

Когда я делаю запрос сейчас, я получаю сообщение об ошибке:

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

person Michael Skarum    schedule 01.05.2012    source источник
comment
Ответ здесь, но я не могу превратить его в настоящий со своего телефона west-wind.com/weblog/posts/2011/Feb/11/   -  person John Sheehan    schedule 01.05.2012
comment
Отлично - я обновил вопрос с ответом. Но напишите реальный ответ, и я приму его :-)   -  person Michael Skarum    schedule 02.05.2012
comment
Как правило, лучше импортировать тестовые сертификаты в якоря доверия тестовых клиентов, чем полностью игнорировать проверку сертификата. Во-первых, это более реалистично; во-вторых, вы не оставляете такого рода небезопасный код в конечном продукте.   -  person Bruno    schedule 02.05.2012
comment
+1, спасибо; как раз то, что я искал!   -  person Chris Townsend    schedule 06.11.2012
comment
Я бы сказал, что лучше написать ответ на свой вопрос, чем запекать ответ в вопросе.   -  person Johan Larsson    schedule 20.06.2013
comment
Вы правы, я добавил ответ :-)   -  person Michael Skarum    schedule 21.06.2013


Ответы (3)


Как предложил Джон:

ServicePointManager.ServerCertificateValidationCallback +=
        (sender, certificate, chain, sslPolicyErrors) => true;
person Michael Skarum    schedule 21.06.2013
comment
Работает, но это не очень хорошо, учитывая, что он устанавливает глобальное поведение. - person talles; 29.06.2016
comment
Вы можете проверить sender.Address, чтобы возвращать true только в том случае, если это хост, для которого вы можете обойти проверку SSL. - person Erwin Mayer; 16.03.2019
comment
Ниже приведен еще один ответ, который показывает, как установить это для вашего объекта RestClient, а не глобально. - person JamesHoux; 26.08.2019

Вы можете обойти проверку ssl

На уровне объекта:

(доступно в RestSharp v106.0.0 и более поздних версиях)

//bypass ssl validation check by using RestClient object
var restClient = new RestClient(baseUrl);
restClient.RemoteCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;

ИЛИ

На уровне приложения:

//bypass ssl validation check globally for whole application.
ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;
person M. Hamza Rajput    schedule 28.05.2019

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

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

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

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

person Nigel Thomas    schedule 12.04.2016
comment
Извините, но для меня это непонятно, слишком сложно, в отличие от предыдущего решения, которое просто работает. Я не спец в сертификатах. - person Sergey Kulgan; 09.12.2016
comment
Мой клиент RestSharp Rest пытается получить доступ к службе REST (сторонней/внешней/иностранной), у которой нет действительного сертификата, когда я пытаюсь открыть ее сайт, появляется только предупреждение, которое я вижу в браузере рядом с URL-адресом: соединение не защищено. И нет доступных для экспорта сертификатов из браузера, как вы пишете. У меня нет возможности приобрести сертификат для этого сайта/сервиса, потому что он не мой, я просто хочу получить от него некоторые данные json без ошибок. - person Sergey Kulgan; 09.12.2016