mayho33
Goto Top

PFX-Zertifikat Read-Rechte für Gruppe Benutzer in Powershell

Hi @ All

Ich hänge mit folgendem Problem und bitte um eure Hilfe!

Zur Automatisierung einer Installation ist es notwenig auf ein Zertifikat im Store "Local Computer\LocalMachine\My" Lese-Rechte für die Gruppe "Benutzer" (Lokal) zu vergeben (siehe Bild):

cert leserechte

Da funktioniert natürlich wenn man es manuell macht, jedoch nicht automatisiert per Script.

Zur Umsetzung habe ich das Versucht:
https://gist.github.com/milesgratz/38804dfc336df64191f958004953e9b6
https://www.itnator.net/zertifikat-berechtigungen-aendern-mit-powershell ...

hier mein Script:
$FPrint = @('Add Fingerprint here')  
    
    $SID = New-Object System.Security.Principal.SecurityIdentifier "S-1-5-32-545"  
    foreach ($thumbprint in $FPrint)
    {
        $Cert = Get-ChildItem Cert:\LocalMachine\My | Where-Object { $_.Thumbprint -eq $thumbprint } 
        $privKey = $Cert.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName
        $keyPath = "$($env:ProgramData)\Microsoft\Crypto\RSA\MachineKeys\"  
        $privKeyPath = (Get-Item "$keyPath\$privKey")  

        $Acl = Get-Acl $privKeyPath
        $Ar = New-Object System.Security.AccessControl.FileSystemAccessRule($SID, "Read", "Allow")  
        $Acl.SetAccessRule($Ar)
        Set-Acl $privKeyPath.FullName $Acl

        $privKey = ([System.Security.Cryptography.X509Certificates.RSACertificateExtensions]::GetRSAPrivateKey($Cert)).key.UniqueName
        $keyPath = "$($env:ProgramData)\Microsoft\Crypto\Keys\"  
        $privKeyPath = (Get-Item "$keyPath\$privKey")  

        $Acl = Get-Acl $privKeyPath
        $Ar = New-Object System.Security.AccessControl.FileSystemAccessRule($SID, "Read", "Allow")  
        $Acl.SetAccessRule($Ar)
        Set-Acl $privKeyPath.FullName $Acl
    }

Beim Auslesen des PrivateKey stelle ich fest, dass mir zwar angezeigt wird, dass ein ProvateKey vorhanden ist, er wird aber nicht angezeigt / ausgegeben.

pkey

Kann mir jemand einen Tipp geben wie ich das umsetzen kann oder wo mein Fehler liegt?

Danke für die Unterstützung!

Mayho

Content-ID: 665526

Url: https://administrator.de/contentid/665526

Ausgedruckt am: 23.11.2024 um 22:11 Uhr

TK1987
Lösung TK1987 08.04.2021 aktualisiert um 17:25:13 Uhr
Goto Top
Moin,

AFAIK unterstützt die X509Certificate2-Klasse nur CSP. Wenn der Schlüssel im KSP gespeichert ist, ist die PrivateKey-Eigenschaft daher $Null.

Führe mal folgendes aus:
certutil -store my $thumbprint
Taucht da
 Anbieter = Microsoft Software Key Storage Provider
auf?

Gruß Thomas
mayho33
mayho33 09.04.2021 aktualisiert um 10:09:37 Uhr
Goto Top
Perfekt! Danke!

Funktioniert einwandfrei! leider bekomme ich da die Anzeige:

cerftutil

Hast du dazu noch einen Tipp?

Grüße Mayho!
148121
Lösung 148121 09.04.2021 aktualisiert um 10:22:01 Uhr
Goto Top
Zitat von @mayho33:

Perfekt! Danke!

Funktioniert einwandfrei! leider bekomme ich da die Anzeige:

cerftutil

Hast du dazu noch einen Tipp?

Grüße Mayho!
Wenn man beim Import des Schlüssels in der Policy nicht angegeben hat das man den privaten Schlüssel auch wieder exportieren darf dann lässt sich dieser nicht nachträglich exportieren. Dann muss man diesen erneut importieren diesmal aber mit der Option das dieser auch wieder exportiert werden kann.

Gruß w.
mayho33
mayho33 09.04.2021, aktualisiert am 15.04.2021 um 23:57:38 Uhr
Goto Top
Wenn man beim Import des Schlüssels in der Policy nicht angegeben hat das man den privaten Schlüssel auch wieder exportieren darf dann lässt sich dieser nicht nachträglich exportieren. Dann muss man diesen erneut importieren diesmal aber mit der Option das dieser auch wieder exportiert werden kann.

Das kann ich leider nicht beeinflussen. Aber ich habe eine andere Lösung gefunden:

  • Mit Certutil den unique Key auslesen
  • mit ICacls auf das File berechtigen

Probiere ich die nächsten Stunden aus.

Grüße!

Edit:

Passt! Certutil und Icacls machen das face-wink