CERTUTIL - CSR erstellen

Verschiedene Supportfälle mit "Zertifikaten" haben mich dazu gebracht, auf dieser Seite einen Weg zu beschreiben, den ich nun bevorzug gehe, um, die Kontrolle über die Zertifikatsanforderung zu haben. Allzu oft konnte ein Zertifikat nicht ausgestellt werden oder das anscheinend korrekt installierte Zertifikat war nicht für den geplanten Zweck geeignet oder freigeschaltet. Das passiert immer öfter, wenn z.B. CNG-Key-Speicher genutzt werden, aber die Applikationen damit nicht umgehen können.

Basiswissen

Zertifikate sind wichtig, wenn Datenübertragungen verschlüsselt stattfinden sollen und die Endpunkte beweisen wollen, dass Sie auch die richtigen Endpunkte sind. Dazu dienen Zertifikate, die neben den Namen, eine Gültigkeitsdauer und einem Public-Key auch eine Zertifizierungsinformation enthalten. Sie sind von einer Zertifizierungsstelle "unterschrieben", die auf dem Client vertrauenswürdig eingestuft ist. Das Zertifikat enthält nicht den privaten Schlüssel, der im Idealfall den Server nie verlässt. Um SSL zu nutzen, muss also ein Schlüsselpaar (Private/Public-Key) ermittelt werden. Der Public Key wird dann mit einigen zusätzlichen Informationen ergänzt und als Certificate Signing Request (CSR) an eine Zertifizierungsstelle übermittelt. Diese prüft die Daten und signiert dann den Request. Das Ergebnis ist dann das Zertifikat, welches auf dem Computer dann wieder eingespielt werden kann. Soweit der Schnelldurchlauf.

Mit oder ohne Assistent ?

Sowohl Exchange als auch Lync/Skype für Business haben eigene Assistenten, die Anforderung von Zertifikaten "vereinfachen". Und auch für den IIS gibt es einen passenden Assistenten. Wann immer es einen Assistenten gibt, würde ich diesen auch benutzen aber dennoch alle Optionen genau anschauen.

Knifflig wird es immer dann, denn die Zertifizierungsstelle nicht den "Standard" folgt, sondern eigene Mindeststandards voraussetzt. Das kann z.B. die Schlüssellänge (1024bit ist auf jeden Fall zu Kurz, aber oft der Default beim Request) sein. Aber auch der Name des Templates ist eine kritische Komponente. Die meisten Assistenten setzen hier einfach "Webserver" ein, was für die öffentlichen Zertifizierungsstellen kein Problem ist.

Wer aber eine eigene PKI auf Basis von Windows betreibt, muss ein neues Template anlegen, um eine längere Gültigkeit zu erreichen. Dieses neue Template kann natürlich "Webserver" ersetzen. Oft ist das aber nicht der Fall.

Prüfliste

Wenn Sie also ein Zertifikat anfordern müssen und nicht die Windows native Enrollment-Wege nutzen können, dann erfragen Sie am besten vorher bim Zertifikatsstellenbetreiber die erforderlichen Angaben für einen Zertifikatsantrag (CSR). Hierzu zählen:

Wert Standard Bemerkungen

Template-Name

WebServer

Ein Windows CA-Administrator kann in der Regel nicht das Template beim Signieren ändern. Zu dem im Request enthaltenen Namen muss es also ein Template bei der PKI geben. Sie können aber den Namen auch "leer" lassen. Dann kann der Betreiber selbst ein Template zuweisen

Key Format

CNG oder Legacy

Seit Windows 2008 (?) kann der private Schlüssel noch besser "gesichert" werden. Leider unterstützen auch 2015 die meisten Applikationen noch keinen CNG-Schlüssel-Store. Stellen Sie beim Request sicher, dass Sie den richtigen Zertifikatsspeicher verwenden.

Key-Länge

1024

Mittlerweile erwarten fast alle Zertifizierungsstellen mindestens 2048bit. Ihre Schlüssellänge muss mindestens der Länge im Template entsprechen

Exportierbar

Nein

Wenn Sie das Zertifikat auf mehreren Servern verwenden wollen, z.B.: das OAUTH-Zertifikat im Skype für Business Pool, dann muss der private Key exportierbar gekennzeichnet sein. Das "sieht" aber auch eine PKI und kann dann das Ausstellen verhindern.

SAN-Namen

Nein

Exchange, Lync, Skype für Business und viele andere Dienste nutzen zusätzliche Namen. Sei es um mehrere Domains zu unterscheiden oder mehrere Server mit dem gleichen Zertifikate zu betreiben. Die PKI muss das dann zulassen und ihre Request muss dies enthalten

Dies ist nur eine erste Liste, die sicher nicht vollständig ist. Dazu gibt es nämlich eine ganze Menge an EinstellMöglichkeiten. Starten Sie doch einfach mal eine MMC und erstellen Sie eine Zertifikatsanforderung ohne Template und schauen Sie sich die verschiedenen Optionen an. Hier ein paar  Bilder quasi zur Abschreckung:

Und das ist nur eine Teilmenge der Optionen. Es gibt aber durchaus Videos und How-To's, wie sie mit der MMC erfolgreich ein Zertifikat anfordern können. Allerdings ist nach meiner Ansicht das Fehlerpotential sehr hoch und Sie sollten sich genau eine Checkliste machen, damit sie alle Optionen korrekt ausgefüllt haben.

Anfordern mit CERTUTIL

Vielen Probleme, Eingabefeldern und Auswahlboxen kann man aus dem Weg gehen, indem man die Kommandozeile nutzt. Windows kann sehr effektiv mit CERTUTIL und einer INF-Datei Zertifikate anfordern. Es ist für einen PKI-Admin durchaus interessant, so eine INF-Datei vorzubereiten, damit ein Admin vor Ort diese einfach noch ergänzen muss und später einfach immer wieder verwenden kann.

Dieser Umstand ist natürlich nur empfehlenswert, wenn die Zertifizierungsstelle "offline" ist und sie nicht die integrierten Funktionen von Windows nud einer PKI im Forest nutzen. Hier kann sich der Client je nach Berechtigungen direkt das Template auslesen und ggfls. sogar den Request direkt bei der PKI einrichten und mit aktivierten "Auto-Enrollment" natürlich auch gleich ausstellen.

Ebenso sollten Sie sich zweimal überlegen, z.B.: die Zertifikate für Lync/Skype für Business wirklich manuell beantragen wollen. Der Assistent ist hier schon sehr hilfreich und erlaubt auch die Angabe eines alternativen Zertifikats.

Wenn Sie aber den Weg über die Kommandozeile gehen wollen, dann habe ich hier eine INF-Vorlage als Muster zur Anforderung eines SAN-Zertifikats mit 2048bit Schlüssellänge, exportierbaren privatem Key und einem eigenen Template "Webserver5Jahre":

[Version] 
Signature="$Windows NT$" 
[NewRequest] 
KeyLength=2048 
KeySpec=1 
KeyUsage=0xa0 
RequestType=PKCS10 
Subject="CN=server.msxfaq.de,o=MSXFAQ,l=Paderborn,c=DE" 
Exportable=1
MachineKeySet=true
SMIME=false
[Extensions] 
2.5.29.17="{Text}"
_continue_="dns=server.msxfaq.de&"
_continue_="dns=server1.msxfaq.de&"
_continue_="dns=server2.msxfaq.de" 
[RequestAttributes] 
CertificateTemplate=Webserver5Jahre

Bis Windows 2003R2 mussten die Werte im Extension Feld als Base64-codierter String abgelegt werden.

Diese INF-Datei speichern Sie auf dem Server und starten Sie dann mit CertUTIL mit den folgenden Parametern

Certreq.exe -new <RequestPolicy.inf> <CertificateRequest.req>

Das Ergebnis ist dann eine REQ-Datei mit der Anforderung zur Weitergabe an Zertifizierungsstelle. Nachdem der PKI-Admin den Request dann signiert hat, bekommen Sie eine CER-Datei zurück, die Sie nun ganz einfach wieder importieren und dann über die Hilfsmittel des Dienstes entsprechend binden.

Weitere Links