Erzeugen eines Zertifikats für den IIS mit einer Enterprise CA

Auf einem Windows Server 2019 ist der IIS installiert. Dieser stellt eine Website zur Verfügung, auf die von internen Rechnern (nicht aus dem Internet) über https zugegriffen werden soll. Auf einem Domain Controller der Domäne (immer noch Server 2008R2) ist eine Enterprise CA installiert.

Erster Schritt war sicherzustellen, dass auf dem Domain Controller für die Role „Active Directory Certificate Services“ nicht nur der Role Service „Certification Authority“, sondern auch der Role Service „Certification Authority Web Enrollment“ (nicht „Certificate Enrollment Web Service“)  installiert ist. Dadurch kann man über http://fqdn-der-CA/certsrv auf die CA zugreifen.

Der geplante Weg war im IIS einen CSR zu erzeugen, mit diesem in der CA ein Zertifikat anzufordern und dieses dann im IIS zu importieren und für das https Binding zu verwenden. Die einzelnen Schritte haben auch wie gewohnt funktioniert, aber beim Aufruf der Website habe ich einen NET::ERR_CERT_COMMON_NAME_INVALID bekommen. Eine Analyse des Zertifikats hat ergeben, dass das Zertifikat (oder genauer: der CSR) keinen „Subject Alternative Name“ (SAN) enthält. Dies scheint aber erforderlich zu sein.

Ich weiß nicht, ob das an der sehr alten Enterprise CA lag oder ob das ein generelles Problem ist, aber auf Basis eines Blogpostings habe ich eine funktionierende Lösung gefunden. Der Schlüssel war dabei, den CSR nicht mit dem IIS sondern mit der Certificate MMC (certmgr) zu erzeugen.

  • Rechtsklick auf „Personal“ in der linken Spalte und dann All Tasks->Advanced Operations -> Create Custom Request
  • Next -> “Active Directory Enrollment Policy” ist schon gewählt -> Next -> Template „Web Server“ und Request Format PKCS#10 -> Next -> Details aufklappen und dort auf Properties klicken
    • Auf dem Reiter Subject oben Common Name (CN), Country (C), evtl. Locality (L), Organisation (O), Organisation Unit (OU) und State (S) eintragen. Unten den Alternative Name (also den FQDN des Webservers) vom Typ DNS eintragen!
    • Auf dem Reiter General einen sinnvollen Friendly Name eintragen
    • Auf dem Reiter Extensions muss nichts gemacht werden („Server Authentication“ ist unter „Extended Key Usage (application policies)“ schon gewählt)
    • Auf dem Reiter Private Key muss unter Key Options noch „Make private key exportable“ aktiviert werden (Key size: 2048 ist schon gewählt). Unter Key type ist schon „Exchange“ gewählt.
    • Mit OK bestätigen
  • Next -> File Name für den CSR angeben und File format Base 64 wählen -> Finish

Damit gibt es eine CSR-Datei, mit der man in der CA ein Zertifikat erzeugen kann

  • http://fqdn-der-CA/certsrv aufrufen
  • Request a certificate -> advanced certificate request
  • Die CSR-Datei mit z.B. Notepad öffnen, den kompletten Inhalt kopieren und in das Feld „Saved Request“ einfügen. Dann noch das Certificate Template „Web Server“ auswählen und mit Submit bestätigen
  • Das erzeugte Zertifikat wird im Browser sofort als CER-Datei heruntergeladen

Damit gibt es ein Zertifikat, das mit der Certificate MMC importiert werden kann und dann sinnvollerweise gleich wieder mit Kennwort exportiert werden sollte.

  • Rechtsklick auf „Personal“ in der linken Spalte und dann All Tasks -> Import
  • Die CER-Datei wählen und in „Personal“ importieren

Damit ist das Zertifikat importiert und kann verwendet werden.

  • Anschließend Rechtsklick auf das importierte Zertifikat und All Tasks -> Export
  • Next -> Yes, export the private Key -> Next -> Unter „Personal Information Exchange – PKCS #12 (.PFX)“ alles außer „Delete the private key if export is successful“ markieren -> Next -> „Password“ aktivieren und zweimal ein sicheres Kennwort eingeben -> Next -> File name für die PFX-Datei angeben -> Next -> Finish

Mit der so erzeugten PFX-Datei und dem Kennwort kann das Zertifikat jederzeit erneut importiert werden.

Jetzt muss das Zertifikat noch der Website zugewiesen werden. Dazu im IIS Manager die „Default Website“ markieren und in der rechten Spalte auf Bindings klicken. Dort ein Binding für https erzeugen und unten das gerade erzeugte SSL-Zertifikat auswählen.

Auf allen Domänen-Mitgliedern sollte das Root-Zertifikat der Enterprise CA automatisch installiert sein, weshalb jetzt die Website über https ohne Zertifikatswarnung aufgerufen werden kann. Falls ein Nicht-Domänen-Mitglied die Website benötigt, muss dort vorab das Root-Zertifikat installiert werden. Man kann dieses einfach von der Enterprise CA als CER-Datei herunterladen und auf dem Nicht-Domänen-Mitglied entweder mit der Certificate MMC oder einfach über Doppelklick importieren.

Damit die Website auch auf einem iPhone ohne Zertifikatswarnung aufgerufen werden kann, muss das Root-Zertifikat der Enterprise CA dort installiert und aktiviert werden.

  • Die Root-Zertifikatsdatei als Mailanhang an das iPhone schicken und dort durch Antippen laden
  • In den iPhone Einstellungen wird ganz oben die Option „Profil geladen“ angezeigt. Diese Option öffnen und oben rechts auf Installieren tippen, PIN eintippen und die Nachfrage bestätigen
  • Anschließend in den iPhone Einstellungen unter Allgemein -> Info -> Zertifikatsvertrauenseinstellungen (ganz unten) die Vertrauenseinstellungen für das soeben geladene Root-Zertifikat einschalten und die Nachfrage bestätigen