h41msh1c0r
Goto Top

Powershell Fingerprints von Zertifikaten abgleichen

Hallo in die Runde,

ich habe einen Satz Zertifikate und möchte Sicherstellen das das Zertifikat auch installiert worden ist.

 Function Read-Store{
   Param($Store)
   $Store = New-Object System.Security.Cryptography.X509Certificates.X509Store("$Store","CurrentUser")  
   $Store.Open("ReadOnly")  
   $X509s = @($Store.Certificates)

   $StoreCerts = @()
   Foreach ($X509 in $X509s){
       $Cert = New-Object -TypeName Psobject -Property @{
       "Subjectname" = $($X509.Subjectname);  
       "FriendlyName" = $X509.FriendlyName;  
       "Subject" = $X509.subject;  
       "Issuer" = $X509.Issuer;  
       "Thumbprint" = $X509.Thumbprint;  
       "NotAfter" = $X509.NotAfter;  
       "NotBefore" = $X509.NotBefore;  
        }#Psobject
    $StoreCerts += $Cert
   } 
    $StoreCerts 
 } 

Das Auslesen des Stores klappt soweit.

Jetzt war die Idee einfach die Fingerprints abzugleichen.
$Fingerprints = @(  "A", "B", "C" )  

  $ReturnCode = "-1"  
  $Result =  Read-Store "My" #Eigene Zertifikate holen  
  $Result |  %{
    foreach($Fingerprint in $Fingerprints){
                                if($Fingerprint -match $_.Thumbprint){
                                    $ReturnCode = "0"  
                                }
                             }
}

Der Abgleich mag nicht.

$_ enthält:

@{NotBefore=12.09.2017 15:35:58; NotAfter=19.08.2117 15:35:58; Subject=CN=<xxxxx>; FriendlyName=; Issuer=CN==<xxxxx>; 
8; Thumbprint=A; Subjectname=System.Security.Cryptography.X509Certificates.X500Dist
inguishedName}

Laut Fehler kennt er Thumbprint nicht, aber mit einem "Write-Host $_.Thumbprint" gibt er mir allerdings den Fingerprint korrekt aus.

Hat einer eine Idee?

VG

Content-Key: 364109

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

Printed on: April 24, 2024 at 04:04 o'clock

Mitglied: 135333
Solution 135333 Feb 08, 2018 updated at 11:35:29 (UTC)
Goto Top
Bedenke: Du machst mit -Match einen Regex und keinen String Vergleich, also wäre hier ein -eq passender!.
Und du mixt hier zwei Arten Schleifen, nicht gerade guter Stil.

Gruß Snap
Member: colinardo
Solution colinardo Feb 08, 2018 updated at 12:03:16 (UTC)
Goto Top
Servus.
Zitat von @H41mSh1C0R:
ich habe einen Satz Zertifikate und möchte Sicherstellen das das Zertifikat auch installiert worden ist.
machst du mit compare-object ganz simpel so:
# Array von Fingerprints
$fingerprints = 'ABCD','DEFG','HIJK'  
# Zeigt dir nur die Fingerprints an die **nicht** im persönlichen Store des Users liegen
compare @($fingerprints) @((gci Cert:\CurrentUser\My).Thumbprint) -PassThru | ?{$_.SideIndicator -eq '<='}  
Alternativ auch ohne compare-object
$fingerprints = 'ABCD','DEFG','HIJK'  
$certs = gci Cert:\CurrentUser\My
$fingerprints | ?{$_ -notin $certs.Thumbprint}
Grüße Uwe
Member: H41mSh1C0R
H41mSh1C0R Feb 08, 2018 at 12:27:05 (UTC)
Goto Top
Danke euch Beiden.

;)