Sign Executables or MSI Packages with Code Sign Certificate

Sign Executables or MSI Packages with Code Sign Certificate

Signieren von Installationspaketen

Intern programmierte Software, selbst erstellte Installationspakete oder auch Skripte sollten zum Schutz immer signiert werden. Das schafft Vertrauen!

Signaturen stehen als Garantie für Integrität und Vertrauenswürdigkeit.

Sign Executables or MSI Packages with Code Sign Certificate

Zuerst erstellen wir mit wenigen Handgriffen ein Code Signing Zertifikat, die Befehle dazu findet ihr unten in der Box.

Danach setzen wir zum Signieren einer Anwendung o.ä. das SignTool aus dem Windows 10 SDK ein. Das Signtool könnt ihr auch direkt hier bei mir herunterladen.

Danach entscheidet ihr euch, ob ihr mit oder ohne Zeistempel signieren möchtet. Die Befehle dazu lauten z.B. wie folgt:

.\Signtool.exe sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /f “C:\Temp\SIGNCERT.pfx” /p sign “C:\Temp\CBMSI-Upgrade.msi”

Signieren von Installationspaketen

Zertifikat für Codesignatur erstellen

.\Signtool.exe sign /td sha256 /fd sha256 /f “C:\Temp\SIGNCERT.pfx” /p sign “C:\Temp\CBMSI-Upgrade.msi”

Sign Executables or MSI Packages with Code Sign Certificate

Signtool TimeStamp

Zertifikat für Codesignatur erstellen

#RootCA
$root = New-SelfSignedCertificate -Type Custom -KeySpec Signature `
-DnsName MasterRootCA `
-Provider “Microsoft Strong Cryptographic Provider” `
-KeyAlgorithm ‘RSA’ `
-KeyExportPolicy Exportable `
-HashAlgorithm sha256 -KeyLength 4096 `
-CertStoreLocation “Cert:\LocalMachine\My” `
-KeyUsageProperty Sign `
-KeyUsage CertSign `
-NotAfter (Get-Date).AddYears(15)

# Code Signing Certificate
New-SelfSignedCertificate -Type Custom -KeySpec Signature `
-Provider “Microsoft Strong Cryptographic Provider” `
-Subject “Master” -KeyExportPolicy Exportable `
-HashAlgorithm sha256 -KeyLength 2048 -KeyAlgorithm ‘RSA’ `
-NotAfter (Get-Date).AddMonths(24) `
-CertStoreLocation Cert:\LocalMachine\My `
-Signer $root -TextExtension @(“2.5.29.37={text}1.3.6.1.5.5.7.3.3”)

Was ist ein Zeitstempel

Ein Time-Stamp (Zeitstempel) ist eine spezielle Form der digitalen Signatur, welche eine zuverlässige Zeitinformation enthält und damit den genauen Zeitpunkt der Signatur eines Programms/einer Applikation bestätigt. Somit ist sichergestellt, dass die Vertrauenswürdigkeit der Signatur nicht zeitgleich mit dem Code Signing-Zertifikat abläuft.

Das bedeutet, auch wenn ein Code Signing-Zertifikat abläuft, weiß der Time-Stamp-Dienst, dass die Signatur der Software zum Zeitpunkt der Signierung gültig war. Somit bleibt die Signatur auch über das Laufzeitende des Code Signing-Zertifikats hinaus gültig.

TimeStampServer
http://dse200.ncipher.com/TSS/HttpTspServer
http://rfc3161timestamp.globalsign.com/advanced
http://services.globaltrustfinder.com/adss/tsa
http://time.certum.pl
http://timestamp.apple.com/ts01
http://timestamp.digicert.com
http://timestamp.entrust.net/TSS/RFC3161sha2TS
http://timestamp.globalsign.com/?signature=sha2
http://timestamp.globalsign.com/scripts/timstamp.dll
http://timestamp.globalsign.com/tsa/r6advanced1
http://timestamp.sectigo.com
http://timestamp.wosign.com
http://tsa.mesign.com
http://tsa.starfieldtech.com/
http://tsa.startssl.com/rfc3161
http://zeitstempel.dfn.de
https://ca.signfiles.com/tsa/get.aspx
https://freetsa.org
https://tsp.iaik.tugraz.at/tsp/TspRequest