BigBasti's Blog About Me & my Digital Lifestyle

10Jun/101

C#: Webservices ueber HTTPS nutzen

Wenn eure Anwendung mit Webservices zusammen arbeitet z.B. über HttpWebRequests und dieser Service eine sichere Verbindung voraussetzt müsst ihr die Zertifikate akzeptieren, die euch der Server sendet, damit eine Kommunikation zu Stande kommen kann.

Im .NET Framework ist das relativ einfach geregelt, man muss lediglich eine delegate Methode registrieren:


            System.Net.ServicePointManager.ServerCertificateValidationCallback +=
                delegate(
                    object sender,
                    System.Security.Cryptography.X509Certificates.X509Certificate certificate,
                    System.Security.Cryptography.X509Certificates.X509Chain chain,
                    System.Net.Security.SslPolicyErrors sslPolicyErrors)
                {
                    return true;
                };

Diese Methode wird nun bei jedem HTTPS Aufruf gestartet. Deren Aufgabe ist es das übergebene Zertifikat zu prüfen und für gut oder schlecht zu befinden. In dem oberen Fall akzeptieren wir alle Zertifikate, egal ob sie sicher sind oder ungültig, dies wird oft zum Testen benutzt.

Natürlich stellen euch die Objekte X509Certificate und X509Chain viele Methoden zur Verfügung mit denen ihr den Hersteller und auch den Aufrufer überprüfen könnt.


           System.Net.ServicePointManager.ServerCertificateValidationCallback +=
                delegate(
                    object sender,
                    System.Security.Cryptography.X509Certificates.X509Certificate certificate,
                    System.Security.Cryptography.X509Certificates.X509Chain chain,
                    System.Net.Security.SslPolicyErrors sslPolicyErrors)
                {
                    //Prüfen, ob das Zertifikat noch nicht abgelaufen ist ( > 0 -> Abgelaufen)
                    if (DateTime.Now.CompareTo(DateTime.Parse(cert.GetExpirationDateString())) < 0)
                    {
                        //Prüfen ob Zertifizierungsstelle bekannt ist (Werte für euch anpassen)
                        if (cert.Issuer.Equals("C=[country ID], S=[state], L=[location], O=[office], OU=[office unit], CN=[host name], E=email id"))
                        {
                            //Alles OK?
                            return true;
                        }
                    }
                    //Ansonsten das Zertifikat ablehnen
                    return false;
                };

So könnte eine einfache Prüfung aussehen, in der geprüft wird, ob das Zertifikat noch gültig ist und ob der Herausgeber bekannt ist. (Hier müsst ihr die Werte natürlich anpassen)

Wenn ihr diesen Aufruf nun einmalig tätigt, bevor ihr den ersten Webzugriff macht sollten keine Probleme bei der Kommunikation mit dem SSL Server auftreten!

Share and Enjoy:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Yigg
  • Google Bookmarks
  • PDF
  • MySpace
  • email
  • Identi.ca
  • Twitter

hat dir dieser Artikel gefallen?

Dann abonniere doch diesen Blog per RSS Feed!

Kommentare (1) Trackbacks (0)
  1. Bloggd: C#: Webservices ueber HTTPS nutzen – http://blog.bigbasti.com/c-webservices-u...


Leave a comment

(required)

Noch keine Trackbacks.

Get Adobe Flash playerPlugin by wpburn.com wordpress themes