Kako podpisati skript PowerShell s certifikatom

Digitalni podpis skripte ali izvršljive datoteke uporabniku omogoča, da preveri, ali je datoteka izvirna in da njene kode niso spremenile tretje osebe. PowerShell ima tudi vgrajeno sposobnost podpisovanja skripte * .ps1.

Skript PowerShell lahko podpišete s posebno vrsto potrdila  Koda Podpisovanje. To potrdilo je mogoče dobiti pri zunanjem organu za tržno certificiranje, internem podjetju ali samopodpisu (seveda to ni najboljša možnost).

Recimo, da so v naši domeni razporejene storitve PKI - Active Directory Certificate Services. Zahtevamo novo potrdilo tako, da odprete stran https: // CA-ime-strežnika / certsrv in zahtevamo novo potrdilo s predlogo Podpisovanje kode (ta predloga mora biti predhodno odobrena v konzoli za overjanje).

Prejeto potrdilo namestite v lokalno shrambo potrdil v računalniku.

Po prejetju potrdila bomo konfigurirali pravilnik za izvajanje skripta PowerShell in tako omogočil zagon samo podpisanih skript. Privzeta vrednost pravilnika (omejeno) blokira izvajanje vseh skript. Če želite dovoliti izvajanje podpisanih skript, lahko spremenite vrsto pravilnika v AllSigned ali RemoteSigned, pri čemer je razlika med tem, da RemoteSigned zahteva podpis samo za skripte, prejete iz interneta.

Set-ExecutionPolicy AllSigned -Force

V ločen objekt shranite potrdilo iz lokalnega pomnilnika za trenutnega uporabnika:

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

Nato bomo skript podpisali s tem potrdilom:

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

Namig. Ko ustvarjate samopodpisano potrdilo za podpisovanje kode z ukaznim oknom New-SelfSignedCertificate, morate določiti vrsto potrdila CodeSigning:

New-SelfSignedCertificate -DnsName test1 -Type CodeSigning

Ko ustvarite potrdilo, ga boste morali prenesti s konzole za upravljanje pomnilnika potrdil (certmgr.msc) iz vmesnega vsebnika v zaupanja vredni koren.

S tem potrdilom lahko podpišete skript:

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

Ko je skript PowerShell podpisan, bo besedilni datoteki skripta ps1 dodan blok podpisov, uokvirjen s črtami

# SIG # Začni blok podpisa
...
...
# SIG # Končni blok podpisov

Ko prvič poskusite zagnati skript, se prikaže opozorilo, če izberete [A] Vedno teči, ko izvajate skripte, podpisane s tem potrdilom, se opozorilo ne bo več pojavilo.

Ali želite zagnati programsko opremo tega nezaupljivega založnika?

Datoteka C: \ PS \ test_script.ps1 objavi CN = test1 in v vašem sistemu ni zaupanja vredna. Zaganjajte samo skripte zaupanja vrednih založnikov.

Namig. Korenskemu certifikatu CA, s katerim je bil podpisan skript, je treba zaupati (sicer se skript sploh ne bo začel). Prav tako je treba zaupati certifikatu, s katerim je podpisan sam skript, sicer se skript zažene s potrditvijo. Tukaj je članek, ki vam bo pomagal: Kako dodati certifikate v domenski računalnik z uporabo GPO

Kaj se zgodi, če spremenim kodo za podpisan skript PowerShell? Zagon bo blokiran, kar pomeni, da je bila vsebina skripta spremenjena.

C: \ PS \ test_script.ps1: Datoteke C: \ PS \ test_script.ps1 ni mogoče naložiti. Vsebino datoteke C: \ PS \ test_script.ps1 bi lahko nepooblaščen uporabnik ali postopek spremenil, ker se hash datoteke ne ujema s hashom, shranjenim v digitalnem podpisu. Skripta se ne more zagnati v določenem sistemu.

Vsaka sprememba podpisanega skripta bo zahtevala njegovo ponovno podpisovanje..