Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Rövid leírás
Ez a cikk bemutatja, hogyan írhat alá szkripteket úgy, hogy megfeleljenek a PowerShell végrehajtási szabályzatainak.
Hosszú leírás
Ezek az információk csak a Windows rendszeren futó PowerShellre vonatkoznak.
A korlátozott végrehajtási szabályzat nem engedélyezi a szkriptek futtatását. Az AllSigned és RemoteSigned végrehajtási szabályzatok megakadályozzák, hogy a PowerShell olyan szkripteket futtasson, amelyek nem rendelkeznek digitális aláírással.
Ez a témakör bemutatja, hogyan futtathat olyan kijelölt szkripteket, amelyek nincsenek aláírva, még akkor is, ha a végrehajtási szabályzat RemoteSigned, és hogyan írhat alá szkripteket saját használatra.
A PowerShell a következő típustípusok Authenticode aláírását ellenőrzi:
-
.ps1szkriptfájlok -
.psm1modulfájlok -
.psd1moduljegyzék és adatfájlok -
.ps1xmlXML-fájlok beírása és formázása -
.cdxmlCDXML-szkriptfájlok -
.xamlXAML-szkriptfájlok
A PowerShell végrehajtási szabályzataival kapcsolatos további információkért lásd: about_Execution_Policies.
Aláírt szkriptek végrehajtásának engedélyezése
Amikor először indítja el a PowerShellt egy számítógépen, a korlátozott végrehajtási szabályzat, amely az alapértelmezett, valószínűleg érvényben lesz.
A korlátozott házirend megakadályozza az összes szkript futtatását.
A számítógépen érvényes végrehajtási szabályzat megkereséséhez írja be a következőt:
Get-ExecutionPolicy
A RemoteSigned szabályzat lehetővé teszi a helyileg létrehozott aláírt vagy aláíratlan szkriptek futtatását. A házirend konfigurálásához indítsa el a PowerShellt a Futtatás rendszergazdaként beállítással, majd a következő paranccsal módosítsa a végrehajtási szabályzatot.
Set-ExecutionPolicy RemoteSigned
További információt a parancsmag súgótémakörében Set-ExecutionPolicy talál.
Aláírt szkript futtatásához a szkriptnek digitális aláírással kell rendelkeznie egy megbízható közzétevőtől. A kódaláíró tanúsítványt olyan hitelesítésszolgáltatónak kell kiállítania, amely megbízhatónak számít a számítógépen. Az önaláírt tanúsítványokat telepíteni kell a megbízható főtanúsítványok tárolóba a számítógépen.
Aláíratlan szkriptek futtatása a RemoteSigned szabályzat használatával
Ha a PowerShell végrehajtási szabályzata RemoteSigned, a PowerShell nem fog aláíratlan, az internetről letöltött szkripteket futtatni, beleértve az e-mailen és csevegőprogramokon keresztül kapott nem aláírt szkripteket is.
Ha egy letöltött szkriptet próbál futtatni, a PowerShell a következő hibaüzenetet jeleníti meg:
The file <file-name> cannot be loaded. The file <file-name> is not
digitally signed. The script will not execute on the system. Please see
"Get-Help about_Signing" for more details.
A szkript futtatása előtt tekintse át a kódot, és győződjön meg arról, hogy megbízik benne. A szkriptek hatása megegyezik a végrehajtható programokkal.
Aláíratlan szkript futtatásához használja a Unblock-File parancsmagot, vagy használja az alábbi eljárást.
- Mentse a szkriptfájlt a számítógépre.
- Kattintson a Start gombra, kattintson a Saját gép elemre, és keresse meg a mentett szkriptfájlt.
- Kattintson a jobb gombbal a szkriptfájlra, majd kattintson a Tulajdonságok parancsra.
- Kattintson a Tiltás feloldása gombra.
Ha az internetről letöltött szkript digitális aláírással rendelkezik, de még nem bízott meg a közzétevőben, a PowerShell a következő üzenetet jeleníti meg:
Do you want to run software from this untrusted publisher?
The file <file-name> is published by CN=<publisher-name>. This
publisher is not trusted on your system. Only run scripts
from trusted publishers.
[V] Never run [D] Do not run [R] Run once [A] Always run
[?] Help (default is "D"):
Ha megbízik a közzétevőben, válassza a Futtatás egyszer vagy a Mindig futtatás lehetőséget. Ha nem bízik meg a közzétevőben, válassza a Soha futtatás vagy a Futtatás mellőzése lehetőséget. Ha a Soha futtatás vagy a Mindig futtatás lehetőséget választja, a PowerShell nem kéri újra a közzétevőt.
Szkriptek aláírásának módszerei
Aláírhatja az ön által írt szkripteket és a más forrásokból kapott szkripteket. Mielőtt bármilyen szkriptet aláírna, vizsgálja meg az egyes parancsokat annak ellenőrzéséhez, hogy biztonságos-e a futtatás.
A parancsfájlok aláírásáról további információt a Set-AuthenticodeSignature című témakörben talál.
A New-SelfSignedCertificate PowerShell 3.0 PKI moduljában bevezetett parancsmag létrehoz egy teszteléshez megfelelő önaláírt tanúsítványt. További információt a parancsmag súgótémakörében New-SelfSignedCertificate talál.
Ha digitális aláírást szeretne hozzáadni egy szkripthez, azt kódaláíró tanúsítvánnyal kell aláírnia. Két tanúsítványtípus alkalmas szkriptfájl aláírására:
Hitelesítésszolgáltató által létrehozott tanúsítványok: Egy nyilvános hitelesítésszolgáltató díj ellenében ellenőrzi az Ön személyazonosságát, és kódaláíró tanúsítványt ad Önnek. Ha egy megbízható hitelesítésszolgáltatótól vásárolja meg a tanúsítványt, megoszthatja a szkriptet más Windows rendszerű számítógépek felhasználóival, mert ezek a számítógépek megbíznak a hitelesítésszolgáltatóban.
Létrehozott tanúsítványok: Létrehozhat egy önaláírt tanúsítványt, amelyhez a számítógép a tanúsítványt létrehozó hatóság. Ez a tanúsítvány ingyenes, és lehetővé teszi szkriptek írását, aláírását és futtatását a számítógépen. Az önaláírt tanúsítvány által aláírt szkriptek azonban nem futnak más számítógépeken.
Az önaláírt tanúsítvány csak tesztelési célokra használható szkriptek aláírására. Az önaláírt tanúsítványok nem megfelelőek a megosztani kívánt szkriptekhez.
Ha önaláírt tanúsítványt hoz létre, mindenképpen engedélyezze az erős titkos kulcsvédelmet a tanúsítványon. Ez megakadályozza, hogy a rosszindulatú programok szkripteket írjanak alá az Ön nevében. Az utasításokat a témakör végén találja.
Önaláírt tanúsítvány létrehozása
Önaláírt tanúsítvány létrehozásához használja a New-SelfSignedCertificate parancsmagot a PKI modulban. Ezt a modult a PowerShell 3.0-ban vezettük be. További információt a parancsmag súgótémakörében New-SelfSignedCertificate talál.
$params = @{
Subject = 'CN=PowerShell Code Signing Cert'
Type = 'CodeSigning'
CertStoreLocation = 'Cert:\CurrentUser\My'
HashAlgorithm = 'sha256'
}
$cert = New-SelfSignedCertificate @params
A Makecert.exe használata
Ha önaláírt tanúsítványt szeretne létrehozni a Windows korábbi verzióiban, használja a Tanúsítványlétrehozás eszközt MakeCert.exe. Ezt az eszközt a Microsoft .NET SDK (1.1-s és újabb verziók) és a Microsoft Windows SDK tartalmazza.
Az eszköz szintaxisával és paraméterleírásával kapcsolatos további információkért lásd: MakeCert.exe Tanúsítványlétrehozó eszköz (MakeCert.exe).
Ha az MakeCert.exe eszköz használatával szeretne tanúsítványt létrehozni, futtassa az alábbi parancsokat egy SDK parancssori ablakban.
Feljegyzés
Az első parancs létrehoz egy helyi hitelesítésszolgáltatót a számítógéphez. A második parancs létrehoz egy személyes tanúsítványt a hitelesítésszolgáltatótól. A parancsokat pontosan úgy másolhatja vagy gépelheti be, ahogyan azok megjelennek. Nincs szükség helyettesítésre, bár módosíthatja a tanúsítvány nevét.
makecert -n "CN=PowerShell Local Certificate Root" -a sha256 `
-eku 1.3.6.1.5.5.7.3.3 -r -sv root.pvk root.cer `
-ss Root -sr localMachine
makecert -pe -n "CN=PowerShell User" -ss MY -a sha256 `
-eku 1.3.6.1.5.5.7.3.3 -iv root.pvk -ic root.cer
Az MakeCert.exe eszköz egy titkos kulcs jelszavának megadását kéri. A jelszó biztosítja, hogy senki sem használhatja vagy érheti el a tanúsítványt az Ön hozzájárulása nélkül.
Hozzon létre és adjon meg egy megjegyezhető jelszót. Ezt a jelszót később fogja használni a tanúsítvány lekéréséhez.
Annak ellenőrzéséhez, hogy a tanúsítvány megfelelően létrejött-e, az alábbi paranccsal kérje le a tanúsítványt a tanúsítványtárolóban a számítógépen. A fájlrendszer könyvtárában nem talál tanúsítványfájlt.
A PowerShell-parancssorba írja be a következőt:
Get-ChildItem Cert:\CurrentUser\my -CodeSigning
Ez a parancs a PowerShell-tanúsítványszolgáltatót használja a tanúsítványsal kapcsolatos információk megtekintéséhez.
Ha a tanúsítvány létrejött, a kimenet az ujjlenyomatot jeleníti meg, amely a tanúsítványt a következőhöz hasonló kijelzőn azonosítja:
Directory: Microsoft.PowerShell.Security\Certificate::CurrentUser\My
Thumbprint Subject
---------- -------
4D4917CB140714BA5B81B96E0B18AAF2C4564FDF CN=PowerShell User
Szkript aláírása
Miután létrehozott egy önaláírt tanúsítványt, szkripteket írhat alá. Ha az AllSigned végrehajtási szabályzatot használja, a szkript aláírásával futtathatja a szkriptet a számítógépen.
A következő példaszkript Add-Signature.ps1aláír egy szkriptet. Ha azonban az AllSigned végrehajtási szabályzatot használja, a futtatás előtt alá kell írnia a Add-Signature.ps1 szkriptet.
Fontos
A PowerShell 7.2 előtt a szkriptet ASCII vagy UTF8NoBOM kódolással kell menteni. A PowerShell 7.2 és újabb verziói bármilyen kódolási formátumhoz támogatják az aláírt szkripteket.
A szkript használatához másolja a következő szöveget egy szövegfájlba, és nevezze el.Add-Signature.ps1
## SIGNS A FILE
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[string] $File
)
$cert = Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert |
Select-Object -First 1
Set-AuthenticodeSignature -FilePath $File -Certificate $cert
A Add-Signature.ps1 szkriptfájl aláírásához írja be a következő parancsokat a PowerShell parancssorba:
$cert = Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert |
Select-Object -First 1
Set-AuthenticodeSignature Add-Signature.ps1 $cert
A Set-AuthenticodeSignature parancsmag megjegyzésblokkként hozzáadja az aláírást a szkriptfájlhoz a fájl végén. A megjegyzésblokk kezdetét és végét a # SIG #jelzi.
Miután aláírta a szkriptet, futtathatja a helyi számítógépen. A szkript azonban nem fog futni olyan számítógépeken, ahol a PowerShell végrehajtási szabályzatához egy megbízható szolgáltató digitális aláírása szükséges. Ha megpróbálja, a PowerShell a következő hibaüzenetet jeleníti meg:
The file C:\remote_file.ps1 cannot be loaded. The signature of the
certificate cannot be verified.
At line:1 char:15
+ .\ remote_file.ps1 <<<<
Ha a PowerShell egy nem írt szkript futtatásakor jeleníti meg ezt az üzenetet, kezelje a fájlt úgy, ahogyan az aláíratlan szkripteket. Tekintse át a kódot annak megállapításához, hogy megbízhat-e a szkriptben.
Erős védelem engedélyezése a titkos kulcs számára
Ha rendelkezik titkos kulccsal és tanúsítvánnyal a számítógépen, előfordulhat, hogy a rosszindulatú programok szkripteket tudnak aláírni az Ön nevében, ami engedélyezi a PowerShell számára a futtatásukat.
Ha meg szeretné akadályozni az automatikus aláírást az Ön nevében, a Tanúsítványkezelővel Certmgr.exe exportálja az aláíró kulcsot és a tanúsítványt egy .pfx fájlba.
A Tanúsítványkezelőt a Microsoft .NET SDK, a Microsoft Windows SDK és az Internet Explorer tartalmazza.
A tanúsítvány exportálása:
- Indítsa el a Tanúsítványkezelőt.
- Válassza ki a PowerShell helyi tanúsítványgyökér által kibocsátott tanúsítványt.
- Kattintson az Exportálás gombra a Tanúsítványexportáló varázsló elindításához.
- Válassza az Igen lehetőséget, exportálja a titkos kulcsot, majd kattintson a Tovább gombra.
- Válassza az Erős védelem engedélyezése lehetőséget.
- Írjon be egy jelszót, majd írja be újra a megerősítéshez.
- Írja be a fájlnévkiterjesztéssel rendelkező
.pfxfájlnevet. - Kattintson a Befejezés gombra.
A tanúsítvány újbóli importálása:
- Indítsa el a Tanúsítványkezelőt.
- Kattintson az Importálás gombra a Tanúsítvány importálása varázsló elindításához.
- Nyissa meg az
.pfxexportálási folyamat során létrehozott fájl helyét. - A Jelszó lapon válassza az Erős titkos kulcsvédelem engedélyezése lehetőséget, majd adja meg az exportálási folyamat során hozzárendelt jelszót.
- Válassza ki a Személyes tanúsítványtárolót.
- Kattintson a Befejezés gombra.
Az aláírás lejáratának megakadályozása
A szkriptek digitális aláírása az aláíró tanúsítvány lejáratáig érvényes, vagy amíg egy időbélyeg-kiszolgáló ellenőrizni tudja, hogy a szkript aláírása az aláíró tanúsítvány érvényessége alatt történt-e.
Mivel a legtöbb aláíró tanúsítvány csak egy évig érvényes, az időbélyeg-kiszolgáló használatával a felhasználók hosszú évekig használhatják a szkriptet.