dave57
Goto Top

Timestamp für Selfisgned Codesign Zertifikat

Hallo,

ich stehe vor folgenden Problem:
Ich möchte einen Timestamp zu einem Selfsigned Codesign Zertifikat hinzufügen.

Wie ist dort die korrekte Vorgehensweise?

Als erstes habe ich ein Codesign Zertifikat wie folgt erstellt:

New-SelfSignedCertificate -Type CodeSigningCert -Subject "CN=ZertifikatTest" -KeyUsage DigitalSignature -KeyAlgorithm RSA -KeyLength 2048  -NotAfter (Get-Date).AddMonths(120)  

Wie füge ich dort nun einen Timestamp ein?

Ich hatte durch Recherche mal versucht, folgenden Parameter anzuwenden:
–TextExtension @("2.5.29.37={text} 1.3.6.1.5.5.7.3.8")  

Nur dann wird das Zertifikat nicht mehr als "Codesignatur" sondern als "Zeitstempel" angezeigt. Ist das so richtig?

Danke!

Content-ID: 546840

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

Ausgedruckt am: 22.11.2024 um 15:11 Uhr

psannz
psannz 13.02.2020 aktualisiert um 14:02:14 Uhr
Goto Top
Sers,

einen Timestamp Server referenzierst du beim Signieren von Daten. Der Timestamp funktioniert zusätzlich zu deinem Zertifikat und, damit die Signierung auch nach Ablauf deines Zertifikats noch gültig ist. Er beglaubigt damit nicht die Daten an sich, sondern den Zeitpunkt der Beglaubigung der Daten, und stellt somit sicher, dass die Daten signiert wurden bevor das Zertifikat abgelaufen ist, oder widerrufen wurde.

Schau dir mal das PowerShell cmdlet zur Signierung von Daten an: Set-AuthenticodeSignature:
Der Parameter -Certificate definiert das Zertifikat
Der Parameter -TimestampServer den TimeStamp Server. Dafür kannst du beispielsweise http://timestamp.globalsign.com/scripts/timstamp.dll verwenden, oder http://tsa.startssl.com/rfc3161

Theoretisch könntest du für jede neue Signatur dasselbe Zertifikat und einen unterschiedlichen Timestamp Server verwenden.

Grüße,
Philip
Dave57
Dave57 21.02.2020 aktualisiert um 11:06:48 Uhr
Goto Top
Danke für deine Hilfe. Ich habe mich jetzt eine Weile schon mit Set-AuthenticodeSignature beschäftigt nur komme leider immer noch nicht auf eine Lösung. Wie wäre denn die Vorgehensweise für meinen Anwendungsfall? Das Zertifikat heißt ZertifikatTest und liegt unter C:\Temp

Folgendes habe ich schon versucht:

Set-AuthenticodeSignature -FilePath C:\Temp\ZertifikatTest.pfx -Certificate C:\Temp\ZertifikatTest.pfx -TimestampServer "http://timestamp.fabrikam.com/scripts/timstamper.dll  

Set-AuthenticodeSignature  -Certificate C:\Temp\ZertifikatTest.pfx -TimestampServer "http://timestamp.fabrikam.com/scripts/timstamper.dll  

Set-AuthenticodeSignature -FilePath C:\Temp\ZertifikatTest.pfx -TimestampServer "http://timestamp.fabrikam.com/scripts/timstamper.dll  

Danke
psannz
psannz 24.02.2020 um 18:43:08 Uhr
Goto Top
Mit deinen Versuchen bist du leider auf dem Holzweg:
Du versuchst ein Zertifikat zu signieren. Das geht nicht, das Zertifikat wurde bereits von der Stammzertifizierungsstelle signiert. (Oder im Falle eines Selfsigned einfach ohne zusätzliche Signierung erstellt.
Nachträglich lässt sich hier nichts mehr ändern.

Der TimeStamp Server wird zusammen mit dem CodeSigning Zertifikat bei der Signierung einer Datei verwendet. Diese Datei kann ein PowerShell Skript sein, ein Word Dokument, oder sonst irgend eine andere Datei. Aber niemals ein anderes Zertifikat.
Zertifikate werden von Zertifizierungsstellen ausgestellt und dabei signiert. Ein TimeStamp Server ist dabei nicht relevant.

$cert = Get-PfxCertificate -FilePath "C:\Test\TheCodeSigningCertificate.pfx"  
Set-AuthenticodeSignature -FilePath "C:\Test\FileToBeSigned.abc" -Certificate $cert -IncludeChain All -TimestampServer "http://timestamp.globalsign.com/scripts/timstamp.dll"  
Dabei wirst du jedes Mal nach dem Passwort für die PFX Datei mit dem Code Signing Zertifikat gefragt.

Mit obigem Code wird beglaubigt, dass die Datei "C:\Test\FileToBeSigned.abc" die Signierung mit dem Zertifikat "TheCodeSigningCertificate.pfx" tatsächlich zum Zeitpunkt (z.B. 24.02.2020) stattfand.
Solange "TheCodeSigningCertificate.pfx" gemäß dem Beispiel am 24.02.2020 noch gültig (nicht abgelaufen, nicht widerrufen) war, dann bleibt die Signierung auch NACH dem Ablauf oder dem Widerruf von "TheCodeSigningCertificate.pfx" weiterhin gültig.