about_Signing

Rövid leírás

Ismerteti, hogyan írhatja alá a szkripteket, hogy azok 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 digitális aláírással nem rendelkező parancsfájlokat futtasson.

Ez a témakör bemutatja, hogyan futtathat olyan kijelölt parancsfájlokat, 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.

További információ a PowerShell végrehajtási szabályzatairól: 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 (alapértelmezett) valószínűleg érvényben lesz.

A Korlátozott szabályzat nem engedélyezi 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

A helyi számítógépen írt aláíratlan parancsfájlok és más felhasználóktól származó aláírt parancsfájlok futtatá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 számítógépen a végrehajtási házirendet 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 házirendje RemoteSigned, a PowerShell nem futtat az internetről letöltött aláíratlan parancsfájlokat, beleértve az e-mailen és csevegőprogramokon keresztül kapott aláíratlan parancsfájlokat 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 bármely végrehajtható programmal.

Aláíratlan szkript futtatásához használja a Unblock-File parancsmagot, vagy kövesse az alábbi eljárást.

  1. Mentse a parancsfájlt a számítógépre.
  2. Kattintson a Start menü Sajátgép parancsára, és keresse meg a mentett parancsfájlt.
  3. Kattintson a jobb gombbal a parancsfájlra, majd kattintson a Tulajdonságok parancsra.
  4. Kattintson a Tiltás feloldása gombra.

Ha az internetről letöltött parancsfájl 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 fut" lehetőséget. Ha nem bízik meg a közzétevőben, válassza a "Soha ne fusson" vagy a "Ne fusson" lehetőséget. Ha a "Soha nem fut" vagy a "Mindig fut" 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 beszerzett szkripteket. Mielőtt aláírna egy szkriptet, vizsgálja meg az egyes parancsokat annak ellenőrzéséhez, hogy biztonságosan futtatható-e.

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 New-SelfSignedCertificate-parancsmag súgótémakörében talál.

Ha digitális aláírást szeretne hozzáadni egy szkripthez, azt egy kódaláíró tanúsítvánnyal kell aláírnia. A parancsfájlok aláírására kétféle tanúsítvány alkalmas:

  • Hitelesítésszolgáltató által létrehozott tanúsítványok: Díj ellenében a nyilvános hitelesítésszolgáltató ellenőrzi az Ön személyazonosságát, és kódaláíró tanúsítványt ad Önnek. Ha megbízható hitelesítésszolgáltatótól vásárolja meg a tanúsítványt, megoszthatja a parancsfájlt 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.

  • Ön által létrehozott tanúsítványok: Létrehozhat egy önaláírt tanúsítványt, amelyhez a tanúsítványt a számítógép hozza létre. 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ánnyal aláírt parancsfájlok azonban nem futnak más számítógépeken.

Az önaláírt tanúsítványt általában csak a saját használatra írt szkriptek aláírására és más forrásokból származó parancsfájlok aláírására használhatja, amelyek biztonságosnak minősülnek. Nem megfelelő olyan szkriptek esetében, amelyek meg lesznek osztva, még egy vállalaton belül sem.

Ha önaláírt tanúsítványt hoz létre, mindenképpen engedélyezze az erős titkoskulcs-védelmet a tanúsítványon. Ez megakadályozza, hogy rosszindulatú programok parancsfájlokat í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 PKI modul New-SelfSignedCertificate parancsmagát . Ez a modul a PowerShell 3.0-s verzióban érhető el, és Windows 8 és Windows Server 2012 része. 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ó 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 MakeCert.exe kapcsolatos további információkért lásd: Tanúsítványkészítő eszköz (MakeCert.exe).

Ha az MakeCert.exe eszközt tanúsítvány létrehozásához szeretné használni, futtassa az alábbi parancsokat egy SDK parancssori ablakban.

Megjegyzé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 kérni fogja a titkos kulcs jelszavát. A jelszó biztosítja, hogy az Ön beleegyezése nélkül senki sem használhatja vagy érheti el a tanúsítványt. 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 lett-e létrehozva, a következő paranccsal kérje le a tanúsítványt a számítógép tanúsítványtárolójába. 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ányra vonatkozó információk megtekintéséhez.

Ha a tanúsítvány létrejött, a kimenetben az ujjlenyomat látható, amely a tanúsítványt az alábbihoz 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 parancsfájl aláírásával futtathatja a szkriptet a számítógépen.

Az alábbi 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 é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
param([string] $file=$(throw "Please specify a filename."))
$cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
Set-AuthenticodeSignature $file $cert

A szkriptfájl aláírásához Add-Signature.ps1 írja be a következő parancsokat a PowerShell parancssorba:

$cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
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, amelyeken 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 ezt az üzenetet egy nem írt szkript futtatásakor jeleníti meg, úgy kezelje a fájlt, mintha aláíratlan parancsfájlokat kezelne. 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épén, előfordulhat, hogy rosszindulatú programok írhatnak alá szkripteket 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, 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. Írjon be egy .pfx kiterjesztésű fájlnevet.
  8. Kattintson a Finish (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ányimportáló varázsló elindításához.
  3. Nyissa meg az exportálási folyamat során létrehozott .pfx 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 Finish (Befejezés) gombra.

Az aláírás lejáratának megakadályozása

A parancsfájlban lévő digitális aláírás érvényes az aláíró tanúsítvány lejáratáig, 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álata biztosítja, hogy a felhasználók hosszú évekre is használhatják a szkriptet.

Lásd még