Sposób z rejestracją niezaufanego certyfikatu w bazie Windowsa nie jest najlepszym rozwiązaniem. Co jeżeli będziemy chcieli wywołać Web Service po SSLu a na serwerze nie będziemy mogli zmienić certyfikatu a ten który będzie nie będzie miał odpowiedniej nazwy domeny?
Jest na to proste rozwiązanie. Trzeba utworzyć własną klasę, która będzie odpowiedzialna za weryfikację certyfikatów
SSL i dodać w odpowiednie miejsce.
Własna klasa:
using System;
using System.Net;
using System.Security.Cryptography.X509Certificates;
namespace Administrator.Export
{
/// <summary>
/// Klasa definiująca politykę zaufania wobec certyfikatów
SSL/// </summary>
public class TrustAllCertificatePolicy : System.Net.ICertificatePolicy
{
/// <summary>
/// Konstruktor domyślny.
/// </summary>
public TrustAllCertificatePolicy() {}
/// <summary>
/// Metoda sprawdzająca poprawność certyfikatu.
/// </summary>
/// <param name="sp"></param>
/// <param name="cert">Certyfikat.</param>
/// <param name="req"></param>
/// <param name="problem"></param>
/// <returns>Zwraca true jeżeli
certyfikat jest poprawny, w przeciwnym przypadku false.</returns>
/// <remarks>Na potrzeby tego programu ta metoda zawsze zwraca true.</remarks>
public bool CheckValidationResult(ServicePoint sp, X509Certificate cert,
WebRequest req, int problem)
{
return true;
}
}
}
A naszą klasę należy dodać w odpowiednie miejsce tak :) :
// Zmiana polityki związanej z certyfikatami
// Wszystkie certyfikaty mają być uważane za poprawne.
ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();
Pozdrawiam
Marcin Obel
Myślenia toku nie prowokuj... see http://www.ondotnet.pl