
Digitální podpis skriptu nebo spustitelného souboru umožňuje uživateli ověřit, že soubor je originální a že jeho kód nebyl změněn třetími stranami. PowerShell má také vestavěnou schopnost podepisovat soubor skriptu * .ps1.
Skript PowerShell můžete podepsat pomocí zvláštního typu certifikátu Kód Podepisování. Tento certifikát lze získat od externí komerční certifikační autority, interní podnikové certifikační autority nebo certifikátu s vlastním podpisem (samozřejmě to není nejlepší volba).
Předpokládejme, že máme v naší doméně nasazeno certifikační služby Active Directory PKI. Požadujeme nový certifikát přejděte na stránku https: // CA-server-name / certsrv a vyžádejte si nový certifikát se šablonou Podepisování kódu (tato šablona musí být dříve autorizována v konzole certifikační autority).
Nainstalujte přijatý certifikát do místního úložiště certifikátů v počítači.
Po obdržení certifikátu nakonfigurujeme zásady provádění skriptů v prostředí PowerShell, což umožní spuštění pouze podepsaných skriptů. Výchozí hodnota zásady (Omezené) blokuje provádění všech skriptů. Chcete-li povolit spouštění podepsaných skriptů, můžete změnit typ politiky na AllSigned nebo RemoteSigned, což je rozdíl mezi tím, že RemoteSigned vyžaduje podpis pouze pro skripty přijaté z Internetu..
Set-ExecutionPolicy AllSigned -Force
V samostatném objektu uložte certifikát z lokálního úložiště aktuálního uživatele:
$ cert = (Get-ChildItem cert: \ CurrentUser \ my -CodeSigningCert) [0]
Poté podepíšeme skript pomocí tohoto certifikátu:
Set-AuthenticodeSignature -ertificate $ cert -FilePath C: \ PS \ test_script.ps1
Tip. Při vytváření certifikátu s vlastním podpisem pro podpisový kód pomocí rutiny New-SelfSignedCertificate je třeba zadat typ certifikátu CodeSigning:
New-SelfSignedCertificate -DnsName test1 -Type CodeSigning
Po vygenerování certifikátu budete jej muset přenést z konzoly pro správu úložiště certifikátů (certmgr.msc) z kontejneru Intermediate do důvěryhodného kořenového kořenového adresáře..
Pomocí tohoto certifikátu můžete podepsat skript, jako je tento:
Set-AuthenticodeSignature C: \ PS \ test_script.ps1 @ (gci Cert: \ LocalMachine \ My -DnsName test1 -codesigning) [0]
Po podepsání skriptu PowerShell bude do textového souboru skriptu ps1 přidán podpisový blok orámovaný řádky.
# SIG # Zahájení podpisového bloku
...
...
# SIG # Ukončení podpisového bloku
Při prvním pokusu o spuštění skriptu se zobrazí varování, pokud vyberete [A] Vždy běž, při spuštění skriptů podepsaných tímto certifikátem se varování již nezobrazí.
Chcete spustit software od tohoto nedůvěryhodného vydavatele?
Soubor C: \ PS \ test_script.ps1 publikuje CN = test1 a ve vašem systému není důvěryhodný. Skripty spusťte pouze od důvěryhodných vydavatelů.
Co se stane, když změním kód podepsaného skriptu PowerShell? Jeho spuštění bude blokováno, což znamená, že obsah skriptu byl změněn.
C: \ PS \ test_script.ps1: Soubor C: \ PS \ test_script.ps1 nelze načíst. Obsah souboru C: \ PS \ test_script.ps1 mohl být změněn neoprávněným uživatelem nebo procesem, protože hash souboru neodpovídá hashu uloženému v digitálním podpisu. Skript nelze spustit v určeném systému.Jakákoli změna podepsaného skriptu tedy bude vyžadovat jeho opětovné podepsání..