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 dem PSCertificateEnrollment PowerShell Modul
  • Erzeugen der Zertifikatanforderung mit Windows-Bordmitteln (certreq.exe)

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.

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 Common Name innerhalb des Subject als auch als DNS-Name 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] 
; Nach RFC2818 sollte das Subject nicht mehr verwendet werden und darf leer sein (Subject =)
Subject = "CN=%SERVER_FQDN%" 
; Der private Schluessel ist nicht exportierbar 
Exportable = FALSE
; Das Schluesselpaar wird im lokalen Maschinenspeicher erzeugt
MachineKeySet = True
; Empfohlene Schluessellaengen: 2048, 3072, 4096
; 2048 Bit sollten nur noch bis 2021 verwendet werden
; Vor Erhöhung der Schluessellaenge sollte die Kompatibilitaet sichergestellt sein
KeyLength = 3072
; AT_KEYEXCHANGE 
KeySpec = 1
; Digital Signature, Key Encipherment 
KeyUsage = 0xA0
ProviderName = "Microsoft RSA SChannel Cryptographic Provider" 
ProviderType = 12 
SMIME = FALSE 
RequestType = CMC

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

Nun kann anhand dieser Informationsdatei ein Schlüsselpaar und ein Zertifikatantrag erzeugt werden. Die Erstellung erfolgt auf dem Computer als Administrator per Kommandozeile mit nachfolgendem Befehl:

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

Überprüfen des Zertifikatantrags

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

certutil -dump <Zertifikatantrag>.req 

Siehe hierzu auch den 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