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:
- Grundlagen: Die Key Usage Zertifikaterweiterung
- Welche Schlüssellängen sollten für Zertifizierungsstellen und Zertifikate verwendet werden?
- Grundlagen: Cryptographic Service Provider (CSP) und Key Storage Provider (KSP)
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:
- Manuelle Beantragung eines Remotedesktop (RDP) Zertifikats
- Manuelle Beantragung eines Domänencontroller-Zertifikats
Externe Quellen
- How to Request a Certificate With a Custom Subject Alternative Name (Microsoft)
- certreq (Microsoft)
- Object IDs associated with Microsoft cryptography (Microsoft)
8 Gedanken zu „Manuelle Beantragung eines Webserver-Zertifikats“
Kommentare sind geschlossen.