Attribut "userCertificate" - Bitte um Gegenprobe
Hi,
hat jemand Lust, folgendes gegenzuprüfen.
Laut dem, was ich an Dokus finden konnte, hat ein AD-Benutzer standardmäßig nicht das Recht, das Attribut "userCertificate" seines eigenen Benutzerobjekts zu schreiben.
Bei uns im Haus funktioniert das aber. Und das in mehreren Domänen. Ohne dass ich das anhand der vergeben Rechte nachvollziehen könnte, warum das so ist.
Selbst wenn ich einen vollkommen neuen Benutzer anlege, ohne weitere Gruppenmitgliedschaft als "Domänen-Benutzer", und mir dessen effektive Rechte für sich selbst anzeigen lasse, dann hat dieser nicht das Recht, o.g. Attribut zu schreiben.
Melde ich diesen Benutzer aber an einem Client an und lasse dort per PowerShell sein S/MIME Zertifikat in dieses AD-Attribut hochladen, so funktioniert das erstaunlicherweise.
Möchte das mal jemand von Euch in Eurer Umgebung nachstellen?
u.g. das Script, welches ich dafür nutze.
E.
hat jemand Lust, folgendes gegenzuprüfen.
Laut dem, was ich an Dokus finden konnte, hat ein AD-Benutzer standardmäßig nicht das Recht, das Attribut "userCertificate" seines eigenen Benutzerobjekts zu schreiben.
Bei uns im Haus funktioniert das aber. Und das in mehreren Domänen. Ohne dass ich das anhand der vergeben Rechte nachvollziehen könnte, warum das so ist.
Selbst wenn ich einen vollkommen neuen Benutzer anlege, ohne weitere Gruppenmitgliedschaft als "Domänen-Benutzer", und mir dessen effektive Rechte für sich selbst anzeigen lasse, dann hat dieser nicht das Recht, o.g. Attribut zu schreiben.
Melde ich diesen Benutzer aber an einem Client an und lasse dort per PowerShell sein S/MIME Zertifikat in dieses AD-Attribut hochladen, so funktioniert das erstaunlicherweise.
Möchte das mal jemand von Euch in Eurer Umgebung nachstellen?
u.g. das Script, welches ich dafür nutze.
E.
# Aktuellen Benutzer und Domain ermitteln
$UserName = $env:USERNAME
$Domain = $env:USERDOMAIN
# LDAP-Pfad zusammenbauen
$LDAPPath = "LDAP://$Domain"
# Benutzerobjekt im AD suchen
$searcher = New-Object DirectoryServices.DirectorySearcher([ADSI]$LDAPPath)
$searcher.Filter = "(&(objectClass=user)(sAMAccountName=$UserName))"
$searcher.PropertiesToLoad.Add("mail") | Out-Null
$searcher.PropertiesToLoad.Add("distinguishedName") | Out-Null
$result = $searcher.FindOne()
if (-not $result) {
Write-Error "Benutzerobjekt nicht gefunden."
exit
}
# E-Mail-Adresse aus AD holen
$email = $result.Properties["mail"][0]
$dn = $result.Properties["distinguishedName"][0]
# Gültige S/MIME-Zertifikate aus dem lokalen Speicher holen
$now = Get-Date
$certs = Get-ChildItem -Path Cert:\CurrentUser\My | Where-Object {
$_.NotBefore -le $now -and $_.NotAfter -ge $now -and (
$_.Subject -match "E=$email" -or
$_.Subject -match "CN=$email" -or
$_.Subject -eq $email -or
($_.Extensions | Where-Object {
$_.Oid.FriendlyName -eq "Subject Alternative Name" -and $_.Format($true) -match "RFC822 Name=$email"
})
)
}
if (-not $certs) {
Write-Error "Kein gültiges S/MIME-Zertifikat gefunden."
exit
}
# Zertifikat mit dem spätesten Ablaufdatum wählen
$bestCert = $certs | Sort-Object NotAfter -Descending | Select-Object -First 1
# Zertifikat ins AD schreiben
try {
$userEntry = New-Object DirectoryServices.DirectoryEntry("LDAP://$dn")
$userEntry.Properties["userCertificate"].Clear()
$userEntry.Properties["userCertificate"].Add($bestCert.RawData)
$userEntry.CommitChanges()
Write-Output "Zertifikat erfolgreich ins AD hochgeladen."
} catch {
Write-Error "Fehler beim Hochladen des Zertifikats: $_"
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 673700
Url: https://administrator.de/forum/active-directory-zertifikat-attribut-powershell-673700.html
Ausgedruckt am: 05.07.2025 um 09:07 Uhr