outcoldman
outcoldman Denis Gladkikh

Подключение по HTTPS (SSL) - TrustAllCertificatePolicy

SSL, Certificate, .NET, C#, and https

Когда подключаетесь по HTTPS (SSL) к веб-ресурсу – можно получить такую ошибку:

"The underlying connection was closed: Could not establish trust relationship with remote server."

Дело может быть в том, что сервер использует либо просроченный сертификат, либо какой-то самоизданный сертификат, сертификат УЦ которого не установлен на вашем компьютере, либо сертификат выдан на DNS имя, а подключаетесь вы по IP. В общем, причин может быть масса. Когда вы открываете веб-сайт через браузер – он вам предложит на выбор: открыть соединение или нет, программно так вам никто не сделает само собой. Проблему эту можно обойти при помощи свойства ServicePointManager.CertificatePolicy и интерфейса ICertificatePolicy. Пишем свой Policy, очень простой:

using System.Net; 
using System.Security.Cryptography.X509Certificates; 
 
public class TrustAllCertificatePolicy : ICertificatePolicy 
{ 
    public bool CheckValidationResult(ServicePoint sp, 
        X509Certificate cert, WebRequest req, int problem) 
    { 
        return true; 
    } 
} 

Затем перед использованием веб-ресурсов выставляем это Policy по умолчанию:

System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();

Have feedback or questions? Looking for consultation?

My expertise: MongoDB, ElasticSearch, Splunk, and other databases. Docker, Kubernetes. Logging, Metrics. Performance, memory leaks.

Send me an email to public@denis.gladkikh.email.

The content on this site represents my own personal opinions and thoughts at the time of posting.

Content licensed under the Creative Commons CC BY 4.0.