Eine Produktfamilie von Microsoft-Tabellenkalkulationssoftware mit Tools zum Analysieren, Erstellen von Diagrammen und Präsentieren von Daten.
Gerne. Man muss eigentlich nur der Anleitung von Digicert folgen. Zugegeben die ist etwas schwer zu verstehen.
"Microsoft Office Subject Interface Packages for Digitally Signing VBA Projects" herunterladen :
https://www.microsoft.com/en-us/download/details.aspx?id=56617
Das tool tut grossspurig als wäre es ein Installer. Es entpackt aber nur. Anschliessend müssen zwei DLL registriert werden:
regsvr32.exe <complete path to msosip.dll> regsvr32.exe <complete path to msosipx.dll>
Microsoft SDK herunterladen: https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/ und die x86 von sign tool in PATH hinterlegen: C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x86
Hab unser Script verschlankt und nicht nach getestet.
Die Passwortlösung ist deaktiviert, da wir das für die Tests über usernamen anbinden wollen. Wenn mir wer sagen kann, wie es funktioniert, das das Zertifikat über den usernamen abgesichert wird. würde ich mich freuen.
Zertifikat erzeugen :
# Variablen
$gultigkeit = #Gültigkeit in monaten der CA innerhalb dessen es zum signieren benutzt werden darf
$KeyFriendlyName = #Präfix für den RootKey mit Zertifikatstyp und trenner für das Datum
$FriendlyName = #Präfix für den RootCA mit Zertifikatstyp und trenner für das Datum
$certFilePath = "C:\temp\" # Pfad zum ClientZertifikat
$Certificate = @{
DnsName = example.com # Um Ein SAN Zertifikat auszustellen. Kommasepariert können auch subdomains wie xx.example.com hinterlegt weren
Type = "CodeSigningCert"
Subject = "CN=example.com,O=Example AG" # Name des Antragsstellers
NotAfter = (Get-Date).AddMonths($gultigkeit)
FriendlyName = "$FriendlyName$((Get-Date).AddMonths($gultigkeit).ToString('yyyyMMdd'))"
KeyDescription = "Private key for Example Company CA" #
KeyFriendlyName = "$KeyFriendlyName$((Get-Date).AddMonths($gultigkeit).ToString('yyyyMMdd'))"
CertStoreLocation = "Cert:\LocalMachine\My"
# KeyUsage = # Beispiele: "None","EncipherOnly","CRLSign","CertSign","KeyAgreement","DataEncipherment","KeyEncipherment","NonRepudiation","DigitalSignature","DecipherOnly"
}
# Erstellen eines neuen selbstsignierten Zertifikats
$cert = New-SelfSignedCertificate @Certificate
$thumbprint = $cert.Thumbprint
#Add-Type -AssemblyName System.Web
#Add-Type -AssemblyName Microsoft.VisualBasic
#$Zeichen = 12; $Sonderzeichen = 2
#$Password = [System.Web.Security.Membership]::GeneratePassword($Zeichen,$Sonderzeichen)
#$Password = [Microsoft.VisualBasic.Interaction]::InputBox("Das Passwort wurde automatisch mit $Zeichen Zeichen und $Sonderzeichen Sonderzeichen #generiert. Bitte ändern bei Bedarf.", "Generiertes Passwort", $Password)
#$SecurePassword = ConvertTo-SecureString -String $Password -AsPlainText -Force
#$cred = New-Object System.Management.Automation.PSCredential ("USERNAME", $SecurePassword)
$exportPFX =@{
ProtectTo = 'Administrator' #User die auf den Schlüssel zugreifen dürfen
FilePath = "$certFilePath$dnsName$($cert.NotAfter.ToString('yyyyMMdd')).pfx"
#Password = $cred.Password
}
# Exportieren des Zertifikats in eine .cer-Datei
Export-Certificate -Cert $cert -FilePath "$($certFilePath)ClientCertificate-$($thumbprint).cer"
# Exportieren (Backup) in ein PFX
Export-PfxCertificate @exportPFX
Beispiel einzelnes Dokument Signieren
# DOC: https://learn.microsoft.com/en-us/dotnet/framework/tools/signtool-exe
$xlsxTest = 'c:\tmp\Test.xlsm' #Test Datei zum signieren.
$TSA = 'http://timestamp.digicert.com'
$sig = 'xxxxxxxxxxxxxxxxx' #thumbprint des scriptes
& 'signtool.exe' sign /debug /sha1 $sig /tr $TSA /td SHA256 /fd SHA256 /sm $xlsxTest
Ist bei uns gerade in der Testphase. Da ich zum ersten mal was mit Powershell gemacht habe, wird da noch jemand drüber schauen der sich besser auskennt. Falls jemand von euch Verbesserungsvorschläge hat, nehme ich sie dankend an.