IIS: Verwalten mehrer Zertifikate auf mehreren Webservern

Da es mühsam sein kann, zahlreiche Sicherheitszertifikate zu verwalten, können Sie Windows PowerShell verwenden, um den Prozess zu beschleunigen.

Jason Helmick

Verwalten von Zertifikaten im großen Web-Umgebungen ist eine große Herausforderung. Möglicherweise gibt es hunderte von Servern hosten Hunderte von SSL-Websites, alle mit einzigartigen Zertifikate. Installieren und Verwalten von Zertifikaten in dieser Größenordnung ist ein zeitaufwändiger Prozess mit der GUI des IIS-Managers.

Haben Sie keine Angst — es ist einen besseren Weg. Ob Sie haben zwei oder 200 Web-Server, Windows PowerShell können Tage, Wochen oder Monate Ihrer Zeit in Minutenschnelle verwandeln. Während des gesamten bereitstellen, installieren und Konfigurieren von Zertifikaten und SSL für Ihre Websites gibt es ein paar Tricks, die Sie verwenden können, um Zertifikate zu suchen, die in Kürze ablaufen, so dass Sie sie ersetzen können.

Die Spielregeln sind einfach: Dies funktioniert auf IIS 7.5 und IIS-8, aber Sie brauchen Windows PowerShell-Remoting aktiviert. In diesem Beispiel gibt es zwei Webserver in einem Lastenausgleich mit eigenen Cluster-IP-Adressen konfiguriert. Jeder läuft drei neuen Websites, die für SSL Zertifikate und Bindungen zu benötigen. Ich habe die Cluster-IP-Adressen im Code geändert, internen Adressen der eigentlichen Web-Sites zu verdecken, aber you get the Idea. Ich habe meine neue Zertifikate und haben die PFX-Dateien bereitstellen. Hier ist die Überblick über die bestehenden Websites:

  • Shop.Company.com – IP-Adresse 192.168.3.201 – Cert: Shop.Company.com.pfx
  • Update.Company.com – IP-Adresse 192.168.3.202 – Cert: Update.Company.com.pfx
  • Register.Company.com – IP-Adresse 192.168.3.203 – Cert: Register.Company.com.pfx

Lassen Sie uns beginnen indem Sie bereitstellen und installieren die Zertifikate auf den Webservern Lastenausgleich.

Bereitstellen und installieren

Benötigen Sie zwei Dinge zu beginnen – eine Variable, die eine Liste der Namen der Web-Server-Computer und eine remote Windows PowerShell-Sitzung zu jedem dieser Server enthält. Meine Computernamen kam aus einer Textdatei auf meinem Computer, aber Sie können sie aus Active Directory greifen, wenn die Web-Server der Domäne angehören:

PS> $servers = Get-Content c:\webservers.txt PS> $session = New-PsSession –ComputerName $servers

Kopieren Sie die Zertifikate zum remote, damit Sie sie leicht installieren können. Mach dir keine Sorgen Sie über jemanden stehlen Ihre PFX-Dateien. Bevor dieser Abschnitt abgeschlossen ist, werden Sie diese löschen. Für diese Demo sind meine PFX-Dateien auf meinem Client-Computer-c:\sites\certpfx:

PS> $servers | foreach-Object{ copy-item -Path c:\sites\certpfx\*.* -Destination "\\$_\c$"}

CertUtil.exe ist ein großes Werkzeug für die Installation von Zertifikaten über Windows PowerShell-Remoting-Sitzungen. In der folgenden Einzeiler wird jedem Webserver Zertifikate installieren. Denken Sie daran, es gibt drei Zertifikate installieren (eine für jede Website), so dass ich die Befehle wiederholt:

PS> Invoke-command -Session $session { certutil -p P@ssw0rd -importpfx c:\shop.company.com.pfx} PS> Invoke-command -Session $session { certutil -p P@ssw0rd -importpfx c:\update.company.com.pfx} PS> Invoke-command -Session $session { certutil -p P@ssw0rd -importpfx c:\register.company.com.pfx}

Wenn Sie CertUtil.exe verwenden, müssen Sie das Kennwort für die PFX angeben. Da ich dies in Echtzeit ausgeführt, haben ich nur die Kennwörter eingegeben. Wenn Sie ein Skript erstellen, würde ich empfehlen, eine Variable, die das Kennwort von einer Eingabeaufforderung wie bekommt die Passwörter ersetzen:

PS> $Cred = (Get-Credential).password

Stellen Sie sicher, von den entfernten Webservern zur Verhinderung von jeder Diebstahl möglich Zertifikat PFX-Dateien löschen:

PS> $servers | foreach-object {Remove-Item -Path "\\$_\c$\*.pfx"}

Mit den Zertifikaten, die auf remote-Servern installiert ist der nächste Schritt die HTTPS-Bindungen für die Websites erstellen.

Websitebindungen erstellen

Jede Website auf jedem Server in der Lastenausgleich erfordert eine HTTPS-Bindung. Verwenden Sie das Cmdlet New-WebBinding aus dem Modul WebAdministration und des Prozess wird ein Kinderspiel. Cmdlet-Parameter geben Sie den Sitenamen, Protokoll, Port und die Cluster-IP-Adresse für die Website. Die SSLFlags bestimmen, wo das Zertifikat, das Sie für die Bindung verwenden befindet:

PS> Invoke-Command -session $session {Import-Module WebAdministration} PS> Invoke-command -Session $session { New-WebBinding -name shop -Protocol https -Port 443 -IPAddress 192.168.3.201 -SslFlags 0} PS> Invoke-command -Session $session { New-WebBinding -name update -Protocol https -Port 443 -IPAddress 192.168.3.202 -SslFlags 0} PS> Invoke-command -Session $session { New-WebBinding -name register -Protocol https -Port 443 -IPAddress 192.168.3.203 -SslFlags 0}

Die Zertifikate, die Sie gerade im Windows-Zertifikatspeicher sind installiert, aber hier sind die Optionen:

  • 0 – Regelmäßige Zertifikat im Windows-Zertifikatspeicher
  • 1 – Serverzertifikat Namen Angabe (SNI)
  • 2 – Zentrale Zertifikatspeicher
  • 3-SNI-Zertifikat im Zertifikatspeicher zentrale

Es gibt einen letzten Schritt abgeschlossen ist, die oft übersehen und vergessen: verknüpfen die Zertifikate auf der neuen Website-Bindungen.

Binden Sie die Zertifikate

Dieser letzte Schritt kann verwirrend sein. Grafische IIS-Manager blendet diesen Teil des Prozesses, aber Sie können nicht aus es heraus, wenn Sie Ihre Websites mit SSL arbeiten möchten. Sie haben das Zertifikat auf die Bindung der Website verlinken.

Dies ist ein zwei-Phasen-Prozess. Zuerst müssen Sie den Fingerabdruck des Zertifikats für jede Website zu erhalten, so dass es eine richtige SSL-Bindung aufbauen kann. Denken Sie daran, ich arbeite mit drei Websites in diesem Beispiel. Ich brauche den Fingerabdruck von jedem eindeutiges Zertifikat. Ich entschied mich für den Fingerabdruck in drei verschiedene Variablen speichern, damit ich sie nicht verwirrt, wenn ich ihnen zu den Websites Links:

PS> Invoke-Command -session $session { $CertShop=Get-ChildItem -Path Cert:\LocalMachine\My | where-Object {$_.subject -like "*shop*"} | Select-Object -ExpandProperty Thumbprint} PS> Invoke-Command -session $session { $CertUpdate=Get-ChildItem -Path Cert:\LocalMachine\My | where-Object {$_.subject -like "*update*"} | Select-Object -ExpandProperty Thumbprint} PS> Invoke-Command -session $session { $CertRegister=Get-ChildItem -Path Cert:\LocalMachine\My | where-Object {$_.subject -like "*register*"} | Select-Object -ExpandProperty Thumbprint}

Jetzt ist es Zeit, um den Fingerabdruck zu packen das gesamte Zertifikat und weisen Sie ihm als für jede Website eine SSL-Bindung verwenden. Der folgende Befehl verwendet Get-Item, das Zertifikat dann New-Item die SSL-Bindung erstellen greifen; die SSL-Bindungen zusammen mit den verbindlichen Informationen erstellt der IIS-Anbieter IIS:\SSLBindings:

PS> Invoke-Command -Session $session { get-item -Path "cert:\localmachine\my\$certShop" | new-item -path IIS:\SslBindings\192.168.3.201!443} PS> Invoke-Command -Session $session { get-item -Path "cert:\localmachine\my\$certUpdate" | new-item -path IIS:\SslBindings\192.168.3.202!443} PS> Invoke-Command -Session $session { get-item -Path "cert:\localmachine\my\$certRegister" | new-item -path IIS:\SslBindings\192.168.3.203!443}

Im IIS verbindliche Auskunft wird normalerweise angezeigt als IPAddress:Port:Hostname (*: 80: *). Jedoch interpretiert Windows PowerShell den Doppelpunkt (:) als Indikator Pfad. Wenn Sie Bindungsinformationen über festgelegt Windows PowerShell verwenden, verwenden Sie stattdessen das Ausrufezeichen (!).

Die Bindungen sind jetzt fertig und erreichen Sie die Websites, die per HTTPS, wie hier gezeigt:

PS> start iexplore https://shop.company.com PS> start iexplore https://update.company.com PS> start iexplore https://register.company.com

Kontrollkästchen für den Ablauf

Es gibt eine andere nützliche Lösung, die alle Informationen beschäftigt, was, die Sie gerade gelernt. Es ist eine gemeinsame Herausforderung für viele von Ihnen: Sind Ihre Zertifikate in Kürze ablaufen?

Teil der Verwaltung von Zertifikaten ist feststellen, ob einige in Kürze ablaufen, so dass Sie sie ersetzen können. Sie können die Konzepte und die Taktiken, die hier verwendet, um dieses Problem anwenden. Sie brauchen nur eine weitere Einzeiler. Wieder noch benötigen eine Windows PowerShell-Remoting-Sitzung geöffnet Sie für die Web-Server, die Sie für ablaufende Zertifikate überprüfen möchten.

Das folgende Beispiel durchsucht alle Zertifikate im Zertifikatspeicher Localmachine. Es vergleicht die Zertifikat-Ablauf-Eigenschaft Notafter auf das aktuelle Datum in eine benutzerdefinierte Spalte ich den Namen ExpireInDays. Der Filter (Where-Object) überprüft, ob alle Zertifikate weniger als 90 Tage haben, bevor sie ablaufen. Der Befehl listet die Servernamen und Zertifikate in Kürze ablaufen:

PS> Invoke-Command -Session $session { Get-ChildItem -Path Cert:\LocalMachine\My | Select-Object -Property PSComputerName, Subject, @{ n='ExpireInDays';e={($_. notafter - (Get-Date)).Days}} | Where-Object {$_.ExpireInDays -lt 90}}

Alle Sie habe gelernt hier verwenden, können Sie erfolgreich und schnell ersetzen alle diese Zertifikate — sogar in großem Maßstab – mithilfe von Windows PowerShell.

Jason Helmick

Jason Helmickist Direktor des Windows PowerShell-Technologien für die Schnittstelle technische Ausbildung, mit Sitz in Phoenix, Arizona Er ist ein Redner, Autor, Lehrer und unbeabsichtigte IIS-Administrator.

Verwandte Inhalte