Manuelle Beantragung eines Webserver-Zertifikats

Es gibt Fälle, in welchen man Webserver-Zertifikate nicht über die Microsoft Management Console direkt von einer Zertifizierungsstelle in der eigenen Active Directory Gesamtstruktur beziehen kann oder möchte, beispielsweise wenn das betreffende System kein Domänenmitglied ist.

In diesem Fall ist die Verwendung von Zertifikatvorlagen nicht möglich, und man muss manuell einen Zertifikatantrag (Certificate Signing Request, CSR erstellen).

Vorarbeiten

Sofern die Zertifikatanforderung von einer Active Directory integrierten Zertifizierungsstelle beantwortet werden soll, muss für diese eine entsprechende Zertifikatvorlage definiert werden . Die Vorgegehensweise hierzu ist im Artikel "Konfigurieren einer Secure Socket Layer (SSL) Zertifikatvorlage für Web Server" beschrieben.

Erzeugen des Schlüsselpaars und der Zertifikatanforderung

Es gibt verschiedene Wege, das Schlüsselpaar und die Zertifikatanforderung zu erstellen. Nachfolgend werden die folgenden beiden Methoden beschrieben:

  • Erzeugen der Zertifikatanforderung mit Windows-Bordmitteln (certreq.exe)
  • Erzeugen der Zertifikatanforderung mit dem PSCertificateEnrollment PowerShell Modul

Erzeugen der Zertifikatanforderung mit Windows-Bordmitteln (certreq.exe)

Soll die Zertifikatbeantragung mit den Windows-Bordmitteln erfolgen, muss zunächst eine Informationsdatei (.inf) für den Zertifikatantrag erstellt werden.

Die Informationsdatei muss mit UTF-8 Kodierung abgespeichert werden. Bei Abweichender Kodierung wird die Erstellung der Zertifikatanforderung fehlschlagen (siehe Artikel "Die Erstellung einer manuellen Zertifikatanforderung schlägt fehl mit Fehlermeldung "Expected INF file section name 0xe0000000"").

Mit folgender Datei wird ein Zertifikatanforderung für ein SSL-Zertifikat erzeugt, welches einen 3072-Bit Schlüssel sowie "test.intra.adcslabor.de" sowohl als "commonName" innerhalb des Subject als auch als "dNSName" innerhalb des alternativen Antragstellernamen enthält.

[Version] 
Signature="$Windows NT$"

[Strings]
; Die folgende Variable an die Umgebung anpassen
SERVER_FQDN = "test.intra.adcslabor.de"

; Nachfolgende Strings nicht bearbeiten
; ----------------------------------------------------------------

szOID_SUBJECT_ALT_NAME2 = "2.5.29.17" 
szOID_ENHANCED_KEY_USAGE = "2.5.29.37" 
szOID_PKIX_KP_SERVER_AUTH = "1.3.6.1.5.5.7.3.1"

[NewRequest] 
Subject = "CN=%SERVER_FQDN%" 
Exportable = FALSE
MachineKeySet = True
KeyLength = 3072
KeyUsage = 0xA0 ; Digital Signature, Key Encipherment 
ProviderName = "Microsoft Software Key Storage Provider" 

[Extensions]
%szOID_SUBJECT_ALT_NAME2% = "{text}dns=%SERVER_FQDN%"
%szOID_ENHANCED_KEY_USAGE% = "{text}%szOID_PKIX_KP_SERVER_AUTH%"

Für Hintergrundinformationen zu den einzelnen Optionen siehe folgende Artikel:

Nun kann anhand dieser Informationsdatei ein Schlüsselpaar und ein Zertifikatantrag erzeugt werden. Mit nachfolgendem Befehl wird die Zertifikatanforderung erzeugt.

certreq.exe -new <Informationsdatei>.inf <Zertifikatantrag>.req

Aus der .inf Datei wird eine Zertifikatanforderung mit Dateiendung .req erzeugt.

Der Befehl muss auf demjenigen System aufgeführt werden, auf welchem das Zertifikat später verwendet werden soll. Das Schlüsselpaar wird auf diesem erzeugt, der private Schlüssel verlässt das System niemals.

Erzeugen der Zertifikatanforderung mit dem PSCertificateEnrollment PowerShell Modul

Das PSCertificateEnrollment PowerShell Modul kann über die PowerShell Gallery bezogen und anschließend geladen werden.

Install-Module -Name PSCertificateEnrollment
Import-Module -Name PSCertificateEnrollment

Für die Erstellung der Zertifikatanforderung muss die Windows PowerShell als Administrator gestartet werden, da das Schlüsselpaar für einen Webserver üblicherweise im Systemkontext erzeugt werden soll.

Mit folgendem Befehl wird ein Zertifikatanforderung für ein SSL-Zertifikat erzeugt, welches einen 3072-Bit Schlüssel sowie "test.intra.adcslabor.de" sowohl als Common Name innerhalb des Subject als auch als DNS-Name innerhalb des alternativen Antragstellernamen enthält.

New-CertificateRequest `
-Machine `
-EnhancedKeyUsage ServerAuthentication `
-KeyLength 3072 `
-Subject "CN=test.intra.adcslabor.de" `
-DnsName "test.intra.adcslabor.de"

Mit dem -Exportable Argument kann optional angegeben werden, dass der private Schlüssel exportiertbar sein soll.

Überprüfen des Zertifikatantrags

Der nun erzeugte Zertifikatantrag kann auf Wunsch eingesehen werden mit folgendem Kommandozeilenbefehl:

certutil -dump <Zertifikatantrag>.req 

Siehe hierzu auch Artikel "Eine Zertifikatanforderung (CSR) inspizieren".

Senden des Zertifikatantrags an die Zertifizierungsstelle

Das Senden einer Zertifikatanforderung an eine Zertifizierungsstelle und das Abholen des ausgestellten Zertifikats ist im Artikel "Eine manuell erstellte Zertifikatanforderung an eine Zertifizierungsstelle senden" beschrieben.

Installation des ausgestellten Zertifikats

Das Zertifikat kann nun auf den Computer kopiert werden. Es muss nun in den Zertifikatspeicher installiert und mit dem privaten Schlüssel verbunden werden. Dies geschieht mit folgendem Kommandozeilenbefehl:

certreq -accept <Zertifikat> 

Aktivieren des Zertifikats und anschließender Funktionstest

Das Zertifikat muss nun noch an die konkrete Anwendung (beispielsweise Internet Information Services) gebunden werden. Dieser Prozess ist spezifisch für das jeweilige Webserver-Produkt.

Weiterführende Links:

Externe Quellen