Hallo zusammen. Heute fragte mich ein Kunde wie man herausfinden kann, auf welcher Maschine ein Benutzer-Zertifikat beantragt wurde. Da man diese Information nicht im ausgestellten Zertifikat findet, mußte eine andere Möglichkeit her. Nachtrag 31.03.2009: Die Information ist in einigen (aber nicht allen) Zertifikaten selbst gespeichert: "CERT_REQUEST_ORIGINATOR_PROP_ID", siehe http://msdn.microsoft.com/en-us/library/aa376079(VS.85).aspx. Aber die unten stehende Variante ist einfach cooler. ;-)

Hintergrund für diese Frage war, daß Domänen-Benutzer per Autoenrollment Zertifikate auf verschiedenen Maschinen beantragten und ausrollten, da sie nicht nur eine feste Arbeitsmaschine nutzten (etwa XP Clients, Vista Clients und Terminalserver). Es sollte aus Gründen einer Problemanalyse nachvollzogen werden, von welchen Clients aus die Anforderung bestimmter Zertifikate erfolgt war.

Meine erste Antwort lautete: "Das sollte sich über das CA Auditing herausfinden lassen."

Dem ist jedoch nicht so, wie man in der Übersicht der möglichen Überwachungseinträge sehen kann: http://technet.microsoft.com/en-us/library/cc758154.aspx.

Also gut – welche Alternative existiert?

In einer Zertifikatanforderung (certificate request) wird im Normalfall auch der Maschinenname eingetragen, von dem aus der Request aus erfolgte. Dies ist keine Pflicht, jedoch wird dies von den meisten Clients (Windows als auch andere Betriebssysteme) so umgesetzt. Also kann man die Zertifikatanforderung aus der CA Datenbank auslesen, um den anfordernden Client auszulesen.

Dazu öffnet man beispielsweise die CA MMC und schaut in den "Ausgestellten Zertifikaten" (Issued Certificates) nach dem Benutzer-Zertifikat, welches man überprüfen möchte. Hat man dieses Benutzer-Zertifikat gefunden, notiert man sich die "Request ID", also beispielsweise "4711".

Nun liest man die CA Datenbank aus und läßt sich nur den Eintrag mit der „Request ID“ --> „4711“ exportieren:

C:\> certutil.exe -view -restrict RequestID=4711 > C:\export.txt

Hinweis: Weitere Optionen dazu läßt man sich ggf. mittels "certutil -v -view -?" anzeigen.

Im Export findet sich dann neben vielen anderen Informationen ein Eintrag namens "rmd: machine.domain.tld". Dieser Eintrag stellt den Client dar, von dem aus das Benutzer-Zertifikat (in diesem Fall per Autoenrollment) beantragt wurde, siehe http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-WCCE%5D.pdf: "rmd | DNS | The requesting machine DNS name. | mymachine.contoso.com"

Das reicht auch schon aus, um den Client zu identifizieren. :-)

Zusätzliche Informationen zu den Möglichkeiten von certutil.exe bei „Problembehandlungen“ finden sich beispielsweise hier: http://technet2.microsoft.com/WindowsServer/de/library/03fc472d-4b66-41ee-97a5-5ae181beae2d1031.mspx

Viele Grüße in die Schweiz,
Fabian