nagus
Goto Top

Verständnisfrage zu Powershell Code Signing Certificate

Hi zusammen,
ich habe mal eine Frage zu Powershell und signierten Skripten. Bei der Suche bin ich nicht so richtig schlau daraus geworden ....

Wenn ich mir ein Code Signing Certificate erstelle und damit ein Skript signiere, wird ja der Signaturblock an das Ende des Skriptes geschrieben.
Was passiert jetzt, wenn ich die Datei verändere, abspeichere und dann erneut ausführe? Ich konnte das nicht so richtig nachvollziehen ...
Prüft Powershell nur ob das eingefügte Zertifikat mit dem von mir erstellten übereinstimmt oder ist das ein Fingerprint auf die Datei?


Wenn ich eine Datei signiere erhalte ich aktuell auch immer die folgende Meldung, die wenig hilfreich ist.
SignerCertificate                         Status                                                                     Path                                                                     
-----------------                         ------                                                                     ----                                                                     
F83E6F3A213C4A7C8B51A0E42C52D1C184C6E3E5  UnknownError                                                               KompatibilitaetsPruefung.ps1       
Das Zertifikat wird aber an das Ende des Skriptes geschrieben.
Ist die Datei jetzt signiert oder nicht und wie kann ich das prüfen?

Danke schon mal für Erhellung face-big-smile

Content-ID: 669470

Url: https://administrator.de/forum/verstaendnisfrage-zu-powershell-code-signing-certificate-669470.html

Ausgedruckt am: 26.12.2024 um 14:12 Uhr

Celiko
Lösung Celiko 13.11.2024 aktualisiert um 17:38:47 Uhr
Goto Top
Hi,

Wenn das Script geändert wird muss es erneut zertifiziert werden.
In den Eigenschaften wird nach Änderung das Zertifikat als invalid angezeigt.

Wenn das nicht der Fall wäre könnte jeder jedes signierte Script nehmen und missbrauchen.

Bin mir gerade unsicher wie das ermittelt wird, hat aber vermutlich etwas mit dem hash des scriptes zutun?
Da kann bestimmt jemand anderes genaueres sagen.

Google sagt:
Any changes in the code will lead to a different hash value, making tampering detectable. Integrity Verification: End-users can verify the code's integrity by generating a hash from the downloaded code and comparing it with the signed hash. If both the hashes match, the code will be verified as unaltered.

Also anscheinend der hash...

Damit solltest du mehr Infos bekommen:
Get-AuthenticodeSignature .\test.ps1 | FormatList

Nachtrag für deine Fehlermeldung:
Anscheinend hat er ein Problem das Zertifikat zum signieren zu benutzen.
Also hast du hier noch ein anderes Problem?
Zertifikat kannst du auch im Explorer sehen wenn du dir die Dateieigenschaften anzeigen lässt.


Vg
150940
Lösung 150940 13.11.2024 aktualisiert um 18:03:31 Uhr
Goto Top
  • Wie wurde das Zertifikat erstellt, mit welchen Eigenschaften ? KeyUsage /ExtendedKeyUsage
  • Wurde das Zertifikat in den "TrustedPublishers" Zertifikatsstore der Maschine importiert?

Bei UnknownError ist i.d.R. eines der beiden Punkte oben fehlerhaft umgesetzt worden.

Was passiert jetzt, wenn ich die Datei verändere, abspeichere und dann erneut ausführe?
Du musst es erneut signieren. Jede Änderung am Skript beschädigt die Signatur und diese wird ungültig. Das ist ja der Sinn und Zweck der Signatur. Es wird nur ausgeführt wenn es seit der Signierung unverändert ist, man beglaubigt damit das das Skript und durch Prüfung der Signatur lässt sich feststellen ob es durch dritte manipuliert oder beschädigt wurde.

Gruß catrell
Nagus
Nagus 14.11.2024 um 09:42:32 Uhr
Goto Top
Vielen Dank für die Rückmeldungen!

Beim signieren bin ich nach der Anleitung von MS vorgegagen:
https://learn.microsoft.com/de-de/powershell/module/microsoft.powershell ...


Beim prüfen (thx Cartell) bekomme ich die folgende Meldung:
SignerCertificate                         Status                                                                     Path                                                                     
-----------------                         ------                                                                     ----                                                                     
F83E6F3A213C4A7C8B51A0E42C52D1C184C6E3E5  HashMismatch                                                               KompatibilitaetsPruefung.ps1        
Irgend etwas ist also faul ....
150940
150940 14.11.2024 aktualisiert um 10:04:02 Uhr
Goto Top
Die Meldung sagt es ja schon, das Skript/Datei wurde nach der Signierung verändert.

screenshot
Nagus
Nagus 14.11.2024 aktualisiert um 10:17:42 Uhr
Goto Top
Jupp, habe ich dann auch gesehen face-big-smile

zwischenablage02

Die Meldungen von PS sind halt auch nicht immer hilfreich Oo
Celiko
Celiko 14.11.2024 aktualisiert um 11:17:29 Uhr
Goto Top
Naja, die Meldung ist jetzt wieder eine Andere...

deinem Zertifikat wird nicht vertraut.
Musst das Zertifikat im Computer oder User Zertifikatsstore unter "Trusted Publishers" hinterlegen wenn es nur ein self-signed Cert ist. Evtl. noch als Trusted Root Certification Authority, das müsstest du aber mal probieren.

Wenn du eine richtige CA verwendest musst du die Zertifikats-Chain korrekt hinterlegen, damit denen überhaupt vertraut wird und das Signing Cert bei den Clients im Trusted Publishers Store hinterlegen.

Ich glaube es wäre sinnvoll sich etwas in Zertifikate reinzulesen...

VG