Certificate Enrollment mit IIS und CA auf getrennten Maschinen

Hi,

ich möchte in diesem Blogeintrag detailliert beschreiben, wie man eine Zertifizierungsstelle (CA / Certification Authority) unter Verwendung von Kerberos Protocol Transition (Kerberos Protokoll Übergang / Umwandlung) und Constrained Delegation (eingeschränkte Kerberos-Delegierung) für web-basiertes Ausstellen von Zertifikaten einrichten kann, wenn die CA und der IIS auf getrennten Maschinen liegen.

Am Ende gebe ich noch einige Hinweise dazu, was man in Bezug auf CLM Setups dabei beachten sollte.

Wir benutzen in dem genannten Szenario ein auf dem Client vorhandenes Zertifikat für die SSL-Anmeldung am IIS (Internet Information Server). Der IIS wird dann für die Authentifizierung dieses Client-Zertifikat verwenden und dabei den entsprechenden Windows Account identifizieren, der dem Subject Alternative Name (SAN) in diesem Zertifikat entspricht (sogenanntes „client certificate mapping“). Es findet dann die Kerberos Protocol Transition zwischen dem IIS und der Active Directory statt und es wird dann Kerberos für die Authentifizierung genutzt.

Kerberos ist auf jeden Fall für eine Authentifizierung erforderlich, wenn der IIS nicht lokal auf dem CA Server installiert ist. Auf der andere Seite wollen wir (aus Sicherheitsgründen) nicht, dass die IIS Maschine unbeschränkt "Trusted For Delegation" ist, daher setzen wir die sogenannte „Constrained Delegation“ ein. So kann der IIS nach der Delegierung nur auf eine vordefinierte Liste von Resourcen zugreifen und nicht unbeschränkt Kerberos Ressourcen nutzen.

Wir schauen uns das Vorgehen an folgender Beispielumgebung an:

- Windows Server 2003 SP1 Domänenkontroller (w2k3entca.contoso.com)

- Windows Server 2003 SP1 Unternehmens-Stamm-CA (Enterprise Root-CA) (w2k3TestCA.contoso.com)

- Windows Server 2003 SP1 Web-Registrierungs-Server (W2k3RA.contoso.com)

- Windows XP SP2 (XPSP2.contoso.com); von diesem Client aus testen wir die web-basierte Registrierung

Setup Schritte:

1. Auf dem DC (Domänenkontroller):

1.1 Definiere ein WebPool Konto

- Lege ein WebPool Konto an (in unserem Beispiel: contoso\WebRA), und setze das Kennwort auf „läuft niemals ab“.
Dieses Konto wird für den „Application Pool“ der „certsrv“ Web-Site auf dem Web Enrollment Server benutzt.

- Definiere die folgenden SPNs (Service Principal Names) für dieses Konto:
HTTP/fqdn
HTTP/hostname

1.2 Überprüfe, daß die SPNs vom Maschinenkonto des Web-Registrierungs-Servers sind:
HOST/fqdn
HOST/hostname

1.3 Lege im AD (Active Directory) einen Testbenutzer TestUser an.

2. Auf dem CA Server:

a. Installiere eine Enterprise Root CA (Unternehmens-Stamm-CA); in unserer Beispielumgebung heißt sie EntRootCA.

b. Installiere Hotfix 937919 auf dem CA Server. Während ich dies schreibe, ist geplant, daß der Hotfix in SP3 von Windows Server 2003 enthalten sein soll.
Wenn der Hotfix nicht installiert ist, schlägt die Anforderung des Zertifikats fehl mit der Meldung: „Der angegebene Benutzer existiert nicht. 0x80070525 (WIN32: 1317)”

3. Auf dem Web-Registrierungs-Server:

a. Installiere die Web-Registrierungskomponente des CA Servers und konfiguriere sie so, daß sie auf die EntRootCA zeigt.

b. IIS Einstellungen:

                                  i. Erstelle einen neuen Application Pool (RA) und verwende das oben angelegte WebPool Konto auf der Registerkarte Identität ( hier muß das Kennwort korrekt eingetragen werden)

                                 ii. Stelle das virtuelle Directory der „certsrv“ Web-Seite so ein, daß es in dem neuen RA Application Pool läuft.

                                iii. Schalte den Directory Service Mapper ein: „Web Sites“ Verzeichnis -> Eigenschaften -> Directory Sicherheit

                                iv. Fordere ein Web-Server-Zertifikat von der EntRootCA an, die wir in Schritt 2 erstellt haben: „Default Web Site“ -> Eigenschaften -> Directory Sicherheit -> Sichere Kommunikation -> Serverzertifikat

                                 v. Editiere das virtuelle Directory von certsrv: Eigenschaften -> Directory Sicherheit -> Sichere Kommunikation

1. Aktiviere Maschinenzertifikate (Clients) (aber ohne 1:1 Zuordnung und ohne n:1 Zuordnung)

2. Aktiviere SSL

3. Aktiviere „Client Zertifikat nötig“.

4. Konfiguriere auf dem DC die Einstellungen für die „Constrained Delegation“.

a. Für das Web-Pool Konto „contoso\WebRA“:

                                  i. Öffne in AD Benutzer und Computer die Eigenschaften des Web-Pool Kontos und markiere auf der Registerkarte „Delegierung“ „Vertraue diesem Benutzer nur für die Delegierung ausgewählter Dienste“ -> „Benutze irgendein Authentifizierungsprotokoll“ (“Trust this user for delegation to specified services only” -> “Use any authentication protocol”) und füge folgende Dienste hinzu:
GC und LDAP auf dem DC
HOST, DCOM und RPCSS auf der CA
http auf dem Web-Server

                                 ii. Für das Maschinenkonto des Web-Servers:
Öffne in AD Benutzer und Computer die Eigenschaften des Web-Server Maschinenkontos und markiere auf der Registerkarte „Delegierung“ „Vertraue diesem Benutzer nur für die Delegierung ausgewählter Dienste“ -> „Benutze irgendein Authentifizierungsprotokoll“ (“Trust this user for delegation to specified services only” -> “Use any authentication protocol”) und füge folgende Dienste hinzu:
GC und LDAP auf dem DC
HOST, DCOM und RPCSS auf der CA

5. Auf Windows XP:

a. Melde Dich als der Testbenutzer an, den Du in Schritt 1 erstellt hast, und erstelle beispielsweise via MMC „certmgr.msc“ oder offline mittels „certreq.exe“ etc. ein Benutzerzertifikat (dieses Zertifikat kann auf einer v1 Vorlage basieren oder auf jeder anderen Vorlage für Benutzerzertifikate für Client-Authentifizierung). Es wäre ebenfalls möglich, ein schon vorhandenes Zertifikat einer SmartCard zu benutzen. Dies kommt auf die Umgebung an. Stell sicher, daß das Zertifikat im Subject Alternative Name Attribut („Alternativen Antragstellernamen“) den UPN (Universal Principal Name) des Benutzers in dem Format TestUser@contoso.com enthält und das Client-Zertifikat für SSL Verbindungen genutzt werden kann.
Dieses neu erstellte oder vorhandene Zertifikat ist die Grundlage dafür, daß im nächsten Schritt über die „certsrv“ Webseite überhaupt weitere Zertifikate mittels Constraint Delegation des IIS zur CA erstellt werden können.

b. Öffne den IE (Internet Explorer) – angemeldet als TestUser am Windows XP Client – und gib in der Adressleiste ein „https://web_enr_server/certsrv“. Folge den Anweisungen durch den Assistenten, schicke die Zertifikatanforderung ab und installiere am Ende das Zertifikat.
Wenn nach dem Anfordern des Zertifikats die Fehlermeldung kommt „Der angegebene Benutzer existiert nicht. 0x80070525 (WIN32: 1317)”, überprüfe noch mal, daß der Hotfix 937919 auf der CA installiert ist, wie oben beschrieben. Das ist ein bekanntes Problem.

CLM verwendet ebenfalls den IIS für das Hosting des Certificate Request Agents (CLM läuft als Webdienst) und das Setup ist im Falle von CLM ähnlich zu dem, welches ich gerade beschrieben habe. Zu dem CLM Setup mit Protocol Transition möchte ich hier einige allgemeine Hinweise geben.

CLM kann ebenfalls so konfiguriert werden, daß es Kerberos Protocol Transition und Constrained Delegation verwendet, ähnlich wie ich es oben für die Web-Registrierung beschrieben habe, wenn man folgendes im Kopf behält:

  • CLM hat sein eigenes Web-Pool Konto, das zu dem oben beschriebenen Konto contoso\WebRA paßt.
  • Für das CLM Web-Pool Konto und das CLM Server Konto müssen SPNs eingerichtet werden.
  • Die SSL Settings in IIS müssen auf der CLM Web-Site gesetzt werden statt auf der certsrv Web-Site.
  • Auch dafür ist der Hotfix 937919 nötig.

Gruß
Milan