Kako potpisati PowerShell skriptu s certifikatom

Digitalni potpis skripte ili izvršne datoteke omogućava korisniku da provjeri je li datoteka originalna i da je treći dio nije promijenio njezin kôd. PowerShell također ima ugrađenu mogućnost potpisivanja * .ps1 datoteke skripte.

PowerShell skriptu možete potpisati pomoću posebne vrste certifikata  kod potpisivanje. Ovaj se certifikat može dobiti od vanjskog certifikacijskog tijela, internog korporacijskog certifikata ili certifikata koji samo potpisuje (naravno, ovo nije najbolja opcija).

Pretpostavimo da su PKI - Usluge certifikata Active Directory raspoređene na našoj domeni. Tražimo novi certifikat tako što idemo na stranicu https: // CA-server-name / certsrv i zatražimo novi certifikat s predloškom Potpisivanje koda (ovaj je predložak prethodno odobren u konzoli za provjeru certifikata).

Instalirajte primljeni certifikat u lokalnu trgovinu certifikata na vašem računalu.

Nakon primitka certifikata, konfigurirat ćemo politiku izvršavanja skripte PowerShell, dopuštajući pokretanje samo potpisanih skripti. Zadana vrijednost pravila (Ograničena) blokira izvršavanje bilo koje skripte. Da biste omogućili pokretanje potpisanih skripti, možete promijeniti vrstu pravila u AllSigned ili RemoteSigned, čija je razlika između toga što RemoteSigned zahtijeva potpis samo za skripte primljene s Interneta.

Set-ExecutionPolicy AllSigned -Force

U poseban objekt spremite certifikat iz lokalne pohrane za trenutnog korisnika:

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

Tada ćemo skriptu potpisati pomoću ovog certifikata:

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

vijeće. Prilikom stvaranja samopotpisanog certifikata za potpisivanje koda pomoću cmdleta New-SelfSignedCertificate, morate navesti vrstu certifikata CodeSigning:

Novo-SelfSignedCertificate -DnsName test1 -Type CodeSigning

Nakon generiranja certifikata, morat ćete ga prenijeti s konzole za upravljanje spremištem certifikata (certmgr.msc) iz intermedijarnog spremnika u pouzdan korijen.

Možete potpisati skriptu s ovim certifikatom ovako:

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

Nakon potpisivanja PowerShell skripte, tekstualnoj datoteci ps1 skripte bit će dodan blok potpisa uokviren crtama.

# SIG # Počnite blok potpisa
...
...
# SIG # Završi blok potpisa

Kad prvi put pokušate pokrenuti skriptu, pojavljuje se upozorenje ako odaberete [A] Uvijek trči, kad pokrenete skripte potpisane s ovim certifikatom, upozorenje se više neće pojavljivati.

Želite li pokrenuti softver ovog nepovjerljivog izdavača?

Datoteka C: \ PS \ test_script.ps1 objavljuje CN = test1 i ne vjeruje se u vaš sustav. Pokretajte skripte samo od pouzdanih izdavača.

vijeće. Korijenskom certifikatu CA kojim je skripta potpisana mora se vjerovati (u protivnom se skripta uopće neće pokrenuti). Također se mora vjerovati certifikatu kojim se potpisuje sama skripta, inače će se skripta pokrenuti s potvrdom. Evo članka koji će vam pomoći: Kako dodati certifikate na domensko računalo pomoću GPO-a

Što se događa ako promijenim kôd za potpisanu skriptu PowerShell-a? Njeno pokretanje bit će blokirano, što ukazuje da je sadržaj skripte promijenjen.

C: \ PS \ test_script.ps1: Datoteka C: \ PS \ test_script.ps1 se ne može učitati. Sadržaj datoteke C: \ PS \ test_script.ps1 možda je promijenio neovlašteni korisnik ili postupak, jer hash datoteke ne odgovara hashu pohranjenom u digitalnom potpisu. Skripta se ne može pokrenuti u navedenom sustavu.

Stoga će svaka izmjena potpisane skripte zahtijevati ponovno potpisivanje..