Denis Gladkikh

outcoldman

My personal blog about software development

  • 09 Feb 2010
  • SSL, Certificate, .NET, C#, https
  • 0 comments

Когда подключаетесь по 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();

Comments