Om du använder ett certifikat som på något sätt är felaktigt eller kommer från en utfärdare som du inte litar på, får du upp en dialog som frågar om du vill lita på certifikatet. Alltså om du surfar med en webbläsare. Om du använder en egenutvecklad klient så får du troligen ett exception i koden:

An unhandled exception of type 'System.Net.WebException' occurred in system.dll

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

För att komma runt det här måste du i koden skapa din egen klass som skall implementera ICertificatePolicy. I ICertificatePolicy finns en funktion som du måste överlagra, CheckValidationResult.

Den returnerar true eller false, beroende på om du i din kod vill lite på certifikatet. Här kan man u då välja om man vill göra någon kontroll av certifikatet eller bara släppa det rakt genom.

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

För att din applikation skall använda klassen är det bara att ange detta i koden genom att skapa en instansav den och tilldela instansen till CertificatePolicy:

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

Vill man göra en kontroll av certifikatet görs det i funktionen CheckValidationResult. Då kan man exempelvis titta på utfärdare:

string strIssuer = cert.GetIssuerName(); 

Eller men kan titta på från vilken IP anropet kom:

string strIP = req.RequestUri.Host 

Annonser