Ako podpísať skript PowerShell certifikátom

Digitálny podpis skriptu alebo spustiteľného súboru umožňuje používateľovi overiť, či je súbor originálny a či jeho kód nebol zmenený tretími stranami. PowerShell má tiež vstavanú schopnosť podpísať súbor skriptu * .ps1.

Skript PowerShell môžete podpísať pomocou špeciálneho typu certifikátu  kód podpis. Tento certifikát je možné získať od externej komerčnej certifikačnej autority, internej firemnej certifikačnej autority alebo self-signed certifikát (samozrejme, toto nie je najlepšia možnosť).

Predpokladajme, že máme v našej doméne nasadené certifikačné služby Active Directory PKI. Požadujeme nový certifikát tak, že prejdete na stránku https: // CA-server-name / certsrv a požiadame o nový certifikát so šablónou. Podpis kódu (táto šablóna musí byť predtým povolená v konzole certifikačnej autority).

Nainštalujte prijatý certifikát do miestneho skladu certifikátov vášho počítača.

Po prijatí certifikátu nakonfigurujeme politiku vykonávania skriptov PowerShell, ktorá umožní spustenie iba podpísaných skriptov. Predvolená hodnota politiky (Obmedzené) blokuje vykonanie akýchkoľvek skriptov. Ak chcete povoliť spúšťanie podpísaných skriptov, môžete zmeniť typ politiky na AllSigned alebo RemoteSigned. Rozdiel medzi tým je v tom, že RemoteSigned vyžaduje podpis iba pre skripty prijaté z Internetu..

Set-ExecutionPolicy AllSigned -Force

V samostatnom objekte uložte certifikát z lokálneho úložiska aktuálneho používateľa:

$ cert = (Get-ChildItem cert: \ CurrentUser \ my -CodeSigningCert) [0]

Potom podpíšeme skript pomocou tohto certifikátu:

Set-AuthenticodeSignature -ertificate $ cert -FilePath C: \ PS \ test_script.ps1

rada. Pri vytváraní certifikátu s vlastným podpisom pre podpisový kód pomocou rutiny New-SelfSignedCertificate musíte zadať typ certifikátu CodeSigning:

New-SelfSignedCertificate -DnsName test1 -Type CodeSigning

Po vygenerovaní certifikátu ho budete musieť preniesť z konzoly na správu úložiska certifikátov (certmgr.msc) z kontajnera Intermediate do dôveryhodného root.

Pomocou tohto certifikátu môžete podpísať skript:

Set-AuthenticodeSignature C: \ PS \ test_script.ps1 @ (gci Cert: \ LocalMachine \ My -DnsName test1 -codesigning) [0]

Po podpísaní skriptu PowerShell sa do textového súboru skriptu ps1 pridá blok podpisových podpisov orámovaný riadkami.

# SIG # Začiatok podpisového bloku
...
...
# SIG # Ukončenie podpisového bloku

Pri prvom spustení skriptu sa zobrazí upozornenie, ak vyberiete možnosť [A] Vždy bežať, keď spúšťate skripty podpísané týmto certifikátom, varovanie sa prestane zobrazovať.

Chcete spúšťať softvér od tohto nedôveryhodného vydavateľa?

Súbor C: \ PS \ test_script.ps1 publikuje CN = test1 a vo vašom systéme nie je dôveryhodný. Skripty spúšťajte iba od dôveryhodných vydavateľov.

rada. Certifikát koreňovej CA, ktorým bol skript podpísaný, musí byť dôveryhodný (inak sa skript vôbec nespustí). Dôveryhodný musí byť aj certifikát, ktorým je skript podpísaný, inak sa skript spustí s potvrdením. Tu je článok, ktorý vám pomôže: Ako pridať certifikáty do doménového počítača pomocou GPO

Čo sa stane, ak zmením kód pre podpísaný skript PowerShell? Jeho spustenie bude zablokované, čo naznačuje, že obsah skriptu bol zmenený.

C: \ PS \ test_script.ps1: Súbor C: \ PS \ test_script.ps1 nie je možné načítať. Obsah súboru C: \ PS \ test_script.ps1 mohol neoprávnený užívateľ alebo proces zmeniť, pretože hash súboru sa nezhoduje s hashom uloženým v digitálnom podpise. Skript sa nedá spustiť v určenom systéme.

Akákoľvek zmena podpísaného skriptu si preto bude vyžadovať jeho opätovné podpísanie..