Sdílet prostřednictvím


about_Signing

Krátký popis

Vysvětluje, jak podepsat skripty tak, aby dodržovaly zásady spouštění PowerShellu.

Dlouhý popis

Tyto informace platí jenom pro PowerShell spuštěný ve Windows.

Zásady omezeného spouštění neumožňují spuštění žádných skriptů. Zásady provádění AllSigned a RemoteSigned brání PowerShellu ve spouštění skriptů, které nemají digitální podpis.

Toto téma vysvětluje, jak spustit vybrané skripty, které nejsou podepsané, i když je zásada spouštění RemoteSigned a jak podepisovat skripty pro vlastní použití.

PowerShell zkontroluje podpis Authenticode následujících typů typů:

  • .ps1 soubory skriptu
  • .psm1 soubory modulů
  • .psd1 manifest modulu a datové soubory
  • .ps1xml typy a formátování souborů XML
  • .cdxml Soubory skriptů CDXML
  • .xaml Soubory skriptů XAML

Další informace o zásadách spouštění PowerShellu najdete v tématu about_Execution_Policies.

Povolení spuštění podepsaných skriptů

Při prvním spuštění PowerShellu na počítači se pravděpodobně projeví zásady omezeného spouštění, což je výchozí nastavení.

Zásady s omezeným přístupem neumožňují spuštění žádných skriptů.

Pokud chcete najít efektivní zásady spouštění v počítači, zadejte:

Get-ExecutionPolicy

Pokud chcete spustit nepodepsané skripty, které zapíšete do místního počítače a podepsané skripty od jiných uživatelů, spusťte PowerShell s možností Spustit jako správce a pak pomocí následujícího příkazu změňte zásady provádění v počítači na RemoteSigned:

Set-ExecutionPolicy RemoteSigned

Další informace najdete v tématu nápovědy pro rutinu Set-ExecutionPolicy .

Spouštění nepodepsaných skriptů pomocí zásad spouštění RemoteSigned

Pokud je zásada spouštění PowerShellu RemoteSigned, PowerShell nespustí nepodepsané skripty, které se stáhnou z internetu, včetně nepodepsaných skriptů, které obdržíte prostřednictvím e-mailu a programů pro zasílání rychlých zpráv.

Pokud se pokusíte spustit stažený skript, PowerShell zobrazí následující chybovou zprávu:

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.

Před spuštěním skriptu zkontrolujte kód a ujistěte se, že mu důvěřujete. Skripty mají stejný účinek jako jakýkoli spustitelný program.

Pokud chcete spustit nepodepsaný skript, použijte rutinu Unblock-File nebo použijte následující postup.

  1. Uložte soubor skriptu do počítače.
  2. Klepněte na tlačítko Start, klepněte na položku Můj počítač a vyhledejte uložený soubor skriptu.
  3. Klepněte pravým tlačítkem myši na soubor skriptu a klepněte na příkaz Vlastnosti.
  4. Klikněte na Odblokovat.

Pokud je skript stažený z internetu digitálně podepsaný, ale zatím jste se rozhodli důvěřovat jeho vydavateli, Zobrazí PowerShell následující zprávu:

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"):

Pokud vydavateli důvěřujete, vyberte Spustit jednou nebo Vždy spustit. Pokud vydavateli nedůvěřujete, vyberte možnost Nikdy spustit nebo Nespouštět. Pokud vyberete Možnost Nikdy nespouštět nebo Vždy spustit, PowerShell vás znovu vyzve k zadání tohoto vydavatele.

Metody podepisování skriptů

Můžete podepsat skripty, které píšete, a skripty, které získáte z jiných zdrojů. Před podepsáním jakéhokoli skriptu zkontrolujte jednotlivé příkazy a ověřte, že je bezpečné spustit.

Osvědčené postupy pro podepisování kódu najdete v tématu Osvědčené postupy pro podepisování kódu.

Další informace o podepsání souboru skriptu naleznete v tématu Set-AuthenticodeSignature.

Rutina New-SelfSignedCertificate představená v modulu PKI v PowerShellu 3.0 vytvoří certifikát podepsaný svým držitelem, který je vhodný pro testování. Další informace najdete v tématu nápovědy pro rutinu New-SelfSignedCertificate .

Pokud chcete do skriptu přidat digitální podpis, musíte ho podepsat podpisovým certifikátem kódu. Dva typy certifikátů jsou vhodné pro podepsání souboru skriptu:

  • Certifikáty vytvořené certifikační autoritou: Za poplatek veřejná certifikační autorita ověří vaši identitu a poskytne vám podpisový certifikát kódu. Při nákupu certifikátu od důvěryhodné certifikační autority můžete svůj skript sdílet s uživateli na jiných počítačích se systémem Windows, protože tyto počítače důvěřují certifikační autoritě.

  • Certifikáty, které vytvoříte: Můžete vytvořit certifikát podepsaný svým držitelem, pro který je váš počítač autoritou, která certifikát vytvoří. Tento certifikát je bezplatný a umožňuje psát, podepisovat a spouštět skripty na vašem počítači. Skript podepsaný certifikátem podepsaným svým držitelem se ale nespustí na jiných počítačích.

Certifikát podepsaný svým držitelem byste obvykle použili jenom k podepisování skriptů, které píšete pro vlastní použití, a k podepisování skriptů, které jste získali z jiných zdrojů, které jste ověřili, aby byly bezpečné. Není vhodné pro skripty, které se budou sdílet, i v rámci podniku.

Pokud vytvoříte certifikát podepsaný svým držitelem, nezapomeňte u certifikátu povolit silnou ochranu privátního klíče. Tím zabráníte škodlivým programům podepisovat skripty vaším jménem. Pokyny jsou uvedeny na konci tohoto tématu.

Vytvoření certifikátu podepsaného jeho držitelem (self-signed certificate)

K vytvoření certifikátu podepsaného svým držitelem použijte rutinu New-SelfSignedCertificate v modulu PKI. Tento modul je představený v PowerShellu 3.0. Další informace najdete v tématu nápovědy pro rutinu New-SelfSignedCertificate .

$params = @{
    Subject = 'CN=PowerShell Code Signing Cert'
    Type = 'CodeSigning'
    CertStoreLocation = 'Cert:\CurrentUser\My'
    HashAlgorithm = 'sha256'
}
$cert = New-SelfSignedCertificate @params

Použití Makecert.exe

Chcete-li vytvořit certifikát podepsaný svým držitelem v dřívějších verzích Systému Windows, použijte nástroj MakeCert.exePro vytvoření certifikátu . Tento nástroj je součástí sady Microsoft .NET SDK (verze 1.1 a novější) a sady Microsoft Windows SDK.

Další informace o syntaxi a popisech MakeCert.exe parametrů nástroje naleznete v tématu Nástroj pro vytvoření certifikátu (MakeCert.exe).

Pokud chcete nástroj použít MakeCert.exe k vytvoření certifikátu, spusťte v okně příkazového řádku sady SDK následující příkazy.

Poznámka:

První příkaz vytvoří místní certifikační autoritu pro váš počítač. Druhý příkaz vygeneruje osobní certifikát od certifikační autority. Příkazy můžete zkopírovat nebo zadat přesně tak, jak se zobrazí. Žádné náhrady nejsou nutné, i když můžete změnit název certifikátu.

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

Nástroj MakeCert.exe vás vyzve k zadání hesla k privátnímu klíči. Heslo zajišťuje, že nikdo nebude moct certifikát bez vašeho souhlasu používat ani k němu přistupovat. Vytvořte a zadejte heslo, které si můžete zapamatovat. Později použijete toto heslo k načtení certifikátu.

Pokud chcete ověřit, že se certifikát vygeneroval správně, pomocí následujícího příkazu získejte certifikát v úložišti certifikátů v počítači. V adresáři systému souborů nenajdete soubor certifikátu.

Do příkazového řádku PowerShellu zadejte:

Get-ChildItem cert:\CurrentUser\my -codesigning

Tento příkaz používá zprostředkovatele certifikátu PowerShellu k zobrazení informací o certifikátu.

Pokud byl certifikát vytvořen, výstup zobrazí kryptografický otisk , který identifikuje certifikát na displeji, který se podobá následujícímu:

Directory: Microsoft.PowerShell.Security\Certificate::CurrentUser\My

Thumbprint                                Subject
----------                                -------
4D4917CB140714BA5B81B96E0B18AAF2C4564FDF  CN=PowerShell User ]

Podepsání skriptu

Po vytvoření certifikátu podepsaného svým držitelem můžete podepisovat skripty. Pokud použijete zásadu provádění AllSigned , podepsání skriptu vám umožní spustit skript v počítači.

Následující ukázkový skript podepíše Add-Signature.ps1skript. Pokud však používáte zásadu provádění AllSigned , musíte před spuštěním podepsat Add-Signature.ps1 skript.

Důležité

Před PowerShellem 7.2 musí být skript uložen pomocí kódování ASCII nebo UTF8NoBOM. PowerShell 7.2 a vyšší podporuje podepsané skripty pro libovolný formát kódování.

Chcete-li použít tento skript, zkopírujte následující text do textového souboru a pojmenujte ho 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

Pokud chcete podepsat Add-Signature.ps1 soubor skriptu, zadejte na příkazovém řádku PowerShellu následující příkazy:

$cert = Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert |
    Select-Object -First 1

Set-AuthenticodeSignature add-signature.ps1 $cert

Po podepsání skriptu ho můžete spustit na místním počítači. Skript se ale nespustí na počítačích, kde zásady spouštění PowerShellu vyžadují digitální podpis od důvěryhodné autority. Pokud se pokusíte, PowerShell zobrazí následující chybovou zprávu:

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 <<<<

Pokud PowerShell zobrazí tuto zprávu při spuštění skriptu, který jste nezapsali, zacházejte se se souborem stejně jako se všemi nepodepsanými skripty. Zkontrolujte kód a zjistěte, jestli můžete skript důvěřovat.

Povolení silné ochrany privátního klíče

Pokud máte ve svém počítači privátní klíč a certifikát, můžou škodlivé programy vaším jménem podepisovat skripty, které autorizuje spuštění PowerShellu.

Pokud chcete zabránit automatickému podepisování vaším jménem, použijte Správce Certmgr.exe certifikátů k exportu podpisového klíče a certifikátu do .pfx souboru. Správce certifikátů je součástí sady Microsoft .NET SDK, sady Microsoft Windows SDK a internet Exploreru.

Export certifikátu:

  1. Spusťte Správce certifikátů.
  2. Vyberte certifikát vydaný kořenem místního certifikátu PowerShellu.
  3. Kliknutím na tlačítko Exportovat spustíte Průvodce exportem certifikátu.
  4. Vyberte Ano, vyexportujte privátní klíč a klikněte na tlačítko Další.
  5. Vyberte Povolit silnou ochranu.
  6. Zadejte heslo a pak ho znovu zadejte, abyste ho potvrdili.
  7. Zadejte název souboru, který má příponu .pfx názvu souboru.
  8. Klikněte na Finish (Dokončit).

Opětovný import certifikátu:

  1. Spusťte Správce certifikátů.
  2. Kliknutím na importovat spustíte Průvodce importem certifikátu.
  3. Otevřete umístění .pfx souboru, který jste vytvořili během procesu exportu.
  4. Na stránce Heslo vyberte Povolit silnou ochranu privátního klíče a zadejte heslo, které jste přiřadili během procesu exportu.
  5. Vyberte osobní úložiště certifikátů.
  6. Klikněte na Finish (Dokončit).

Zabránění vypršení platnosti podpisu

Digitální podpis ve skriptu je platný, dokud platnost podpisového certifikátu nevyprší nebo dokud server časového razítka může ověřit, že byl skript podepsán během platnosti podpisového certifikátu.

Vzhledem k tomu, že většina podpisových certifikátů je platná jenom po dobu jednoho roku, pomocí serveru s časovým razítkem zajistíte, že uživatelé budou moct váš skript používat po mnoho let.

Viz také