istike2

Aktuelles AD-Userzertifikat mit Powershell herausfiltern

Hallo,

ich würde gerne durch den LOGON-Script das jeweilige Benutzerzertifikat erneuern

$upn =whoami /upn 
$cert = get-childitem -path cert:\CurrentUser\my\ | format-list | Where-Object EnhancedKeyUsageList -contains "*Sichere E-Mail*"}  
&certreq @('-Enroll', '-user', '-q', '-cert', $cert.SerialNumber, 'Renew', 'ReuseKeys')  

es funktioniert leider nicht. Bzw das Syntax "Where-object" ist irgendwie fehlerhaft. Die Erneuerung des Zertifikats funktioniert an sich ...

Ich möchte also das Zertifikat als Ergebnis bekommen wo diese Zeile vorhanden ist:
EnhancedKeyUsageList : {Clientauthentifizierung (1.3.6.1.5.5.7.3.2), Sichere E-Mail (1.3.6.1.5.5.7.3.4), Verschlüsselndes Dateisystem  (1.3.6.1.4.1.311.10.3.4)} 

In der 2. Zeile versuche ich zwischen normalen und WLAN Zertifikat zu unterscheiden ...
Wie würdet ihr die Abfrage gestalten, um nur das normale Benutzerzertifikat als Ergebnis zu liefern, das wir durch das Script erneuern möchten.

Der Befehl
get-childitem -path cert:\CurrentUser\my\ | format-list DnsNameList, Issuer, EnhancedKeyUsageList
liefert alle Zertifikat. Diese Trefferliste möchte ich weiter eingrenzen.

Gr. I.
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 2571694829

Url: https://administrator.de/forum/aktuelles-ad-userzertifikat-mit-powershell-herausfiltern-2571694829.html

Ausgedruckt am: 06.06.2025 um 00:06 Uhr

colinardo
colinardo 22.04.2022 aktualisiert um 19:29:43 Uhr
Goto Top
Servus.
eine Methode wäre anhand des Zertifikats-Templates der Zertifizierungsstelle "das gewünschte" Benutzer-Zertfikat zu bestimmen.

Wenn also bspw. das Benutzer-Zertifikatstemplate deiner CA "Benutzer" heißt dann
Get-ChildItem Cert:\CurrentUser\My | ?{$_.Extensions | ?{$_.Oid.Value -eq '1.3.6.1.4.1.311.21.7'} | %{$_.Format(0) -match '(Vorlage|Template)=Benutzer'}} | sort NotAfter -Desc | select -F 1  
Du kannst das natürlich auch nach anderen Kriterien des Zertifikats und Extensions bestimmen, kommt halt darauf an was bei euch eindeutig ist. Das was du oben machen wolltest, funktioniert mit dem String-Vergleich nicht weil du da Objects bekommst und die sind je nach System auch Sprachabhängig, hier benutzt du dann am besten gleich den OID Wert zum Vergleich.
$upn = whoami /upn
Get-ChildItem Cert:\CurrentUser\My | ?{$_.EnhancedKeyUsageList.ObjectId -contains '1.3.6.1.5.5.7.3.4' -and $_.Subject -like "E=$upn*"} | sort NotAfter -Desc | select -F 1   

ich würde gerne durch den LOGON-Script das jeweilige Benutzerzertifikat erneuern
Warum willst du es manuell erneuern, weil sich die E-Mail geändert hat? Nur zur Info falls nicht bekannt: Das erneuert sich eigentlich auch automatisch z.B. 6 Wochen vor Ablauf wenn man es passend in der GPO und Cert-Template einstellt.
Der Enrollment agent läuft alle 8 Stunden einmal an um ausstehende renewal Aufträge zu verarbeiten, kann man aber auch per certutil -pulse triggern.
https://docs.microsoft.com/en-us/troubleshoot/windows-server/windows-sec ...

screenshot

Grüße Uwe
istike2
istike2 22.04.2022 um 22:45:54 Uhr
Goto Top
Hallo Uwe,

herzlichen Dank für deine Rückmeldung.

Wir werden es testen und wir geben dir Rückmeldung.

LG

I.