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ů.
Tip. Kořenový certifikát CA, kterým byl skript podepsán, musí být důvěryhodný (jinak se skript vůbec nespustí). Certifikát, kterým je skript podepsán, musí být rovněž důvěryhodný, jinak bude skript spuštěn s potvrzením. Zde je článek, který vám pomůže: Jak přidat certifikáty do doménového počítače pomocí GPOCo 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í..