Megosztás a következőn keresztül:


about_Signing

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

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:

  • .ps1 szkriptfájlok
  • .psm1 modulfájlok
  • .psd1 moduljegyzék és adatfájlok
  • .ps1xml XML-fájlok beírása és formázása
  • .cdxml CDXML-szkriptfájlok
  • .xaml XAML-szkriptfájlok

A PowerShell végrehajtási szabályzataival kapcsolatos további információkért lásd: about_Execution_Policies.

Aláírt szkriptek futtatá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 szabályzat nem teszi lehetővé a szkriptek 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

Ha a helyi számítógépen írt aláíratlan szkripteket és más felhasználóktól származó aláírt szkripteket szeretne futtatni, indítsa el a PowerShellt a Futtatás rendszergazdaként beállítással, majd a következő paranccsal módosítsa a számítógépen a végrehajtási szabályzatot RemoteSignedre:

Set-ExecutionPolicy RemoteSigned

További információt a parancsmag súgótémakörében Set-ExecutionPolicy talál.

Aláíratlan szkriptek futtatása a RemoteSigned végrehajtási 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.

  1. Mentse a szkriptfájlt a számítógépre.
  2. Kattintson a Start gombra, kattintson a Saját gép elemre, és keresse meg a mentett szkriptfájlt.
  3. Kattintson a jobb gombbal a szkriptfájlra, majd kattintson a Tulajdonságok parancsra.
  4. 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 kódaláírásra vonatkozó ajánlott eljárásokért tekintse meg a kódaláírás ajánlott eljárásait.

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.

Általában önaláírt tanúsítványt használna csak a saját használatra írt szkriptek aláírására, valamint olyan szkriptek aláírására, amelyeket más forrásokból szerz be, és amelyek biztonságosnak minősülnek. Nem megfelelő olyan szkriptekhez, amelyeket még egy vállalaton belül is megosztanak.

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 szkriptet ASCII vagy UTF8NoBOM kódolással kell menteni. Más kódolást használó szkriptfájlt írhat alá, de a szkript nem fut, vagy a szkriptet tartalmazó modul importálása sikertelen. A szkript akkor is sikertelen lesz, ha a fájl Unicode (UTF8) karaktereket tartalmaz.

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

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:

  1. Indítsa el a Tanúsítványkezelőt.
  2. Válassza ki a PowerShell helyi tanúsítványgyökér által kibocsátott tanúsítványt.
  3. Kattintson az Exportálás gombra a Tanúsítványexportáló varázsló elindításához.
  4. Válassza az Igen lehetőséget, exportálja a titkos kulcsot, majd kattintson a Tovább gombra.
  5. Válassza az Erős védelem engedélyezése lehetőséget.
  6. Írjon be egy jelszót, majd írja be újra a megerősítéshez.
  7. Írja be a fájlnévkiterjesztéssel rendelkező .pfx fájlnevet.
  8. Kattintson a Befejezés gombra.

A tanúsítvány újbóli importálása:

  1. Indítsa el a Tanúsítványkezelőt.
  2. Kattintson az Importálás gombra a Tanúsítvány importálása varázsló elindításához.
  3. Nyissa meg az .pfx exportálási folyamat során létrehozott fájl helyét.
  4. 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.
  5. Válassza ki a Személyes tanúsítványtárolót.
  6. 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.

Lásd még