SSL einstellen für IIS 7 mit C# und dem ServerManager


Wie ich bereits gezeigt habe gibt es die unterschiedlichsten Wege um für eine Webseite SSL einzustellen. Ich habe das ganze bereits hier gezeigt, in dem ich SSL manuell eingestellt habe und hier in dem ich SSL mit Hilfe von C# und DirectoryEntry gesetzt habe. Jetzt kommt noch das setzten von SSL mit Hilfe des ServerManagers hinzu, was aber nur für den IIS größer der Version 7 geht. Auch hier gehe ich nur auf Details ein die das Einstellen von SSL beinhalten.

Dazu muss gesagt werden das jede Webseite eine ID besitzt im IIS, welche in der ID-Spalte der Webseiten Auflistung des IIS zu finden ist.

image

In unserem Falle handelt es sich um die Webseite mit der ID = 1.

Das Folgende Beispiel Zeigt wie man die passende Webseite findet und ein Binding für ein passendes SSL Zertifikat setzt für Port 443. Hier wird nicht geprüft ob bereits ein Binding existiert, ….

 ServerManager iisManager = new ServerManager();
 Site baseWebsite = null;

 foreach (Site eSite in iisManager.Sites)
 {
     //Es handelt sich um die Basiswebseite diese hat immer die 
     //ID 1 (Sei denn sie wurde evtl. vom Admin gelöscht und neu angelegt)
     if (eSite.Id == 1)
     {
         baseWebsite = eSite;
         break;
     }
 }
 
 baseWebsite.Bindings.Add("*:443:",
         CertificateFunctions.GetCertificateByHashString("61a669c54ab30b5e72209ff88b3c0785df927228").GetCertHash(),
         CertificateFunctions.GetLocalCertificateStore().Name);
 iisManager.CommitChanges();

So einfach kann der SSL Port für eine Webseite mit dem ServerManager angelegt werden. Wenn Sie dann den IIS öffnen dann sehen Sie wie oben im Screenshot bereits zu sehen ist auch den Port 443 mit https in den Bindungen für Ihre Standard Webseite wieder.

So öffnen Sie den lokalen Zertifikatsstore um an den Storename zu kommen für das Zertifikat.

/// 
/// Gibt den Zertiofikat Store zurück der benutzt wird.
/// 
public static X509Store GetLocalCertificateStore()
{
    X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
    store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadWrite);
    return store;
}

Das passende Zertifikat anhand des übergebenen Hashes ermitteln.

/// 
/// Sucht aus dem lokalen Zertifikaten das mit dem übergebenen
/// Hash heraus und gibt das passende Zertifikat zurück
/// 
/// der Hashstring nach dem gesucht werden soll in den Zertifikaten
/// das passende X509Certificate2 | wenns nicht gefunden wird NULL
public static X509Certificate2 GetCertificateByHashString(string hashString)
{
    //Öffnen des lokalen Zertifikatstores
    X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
    store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadWrite);

    //Alle lokalen Zertifikate durchgehen.
    foreach (X509Certificate2 x509Certificate2 in store.Certificates)
    {
        //Wenn das Zertifikat mit dem Hashcode gefunden wurde das Zertifikat zurückgeben.
        if (hashString.ToLower() == x509Certificate2.GetCertHashString().ToLower())
        {
            return x509Certificate2;
        }
    }

    //Das Zertifikat konnte nicht gefunden werden.
    return null;
}
Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s