about_Signing

Krátký popis

Vysvětluje, jak podepisovat skripty tak, aby splň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 zabraňují spuš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 podepsat skripty pro vlastní použití.

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 bude pravděpodobně platit zásada omezeného spouštění (výchozí).

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í na počítači, zadejte:

Get-ExecutionPolicy

Pokud chcete spustit nepodepsané skripty, které píšete na místním počítači 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í na 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 provádě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-mailových a 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.

Než skript spustíte, 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. Klikněte pravým tlačítkem myši na soubor skriptu a potom klepněte na příkaz Vlastnosti.
  4. Klikněte na Odblokovat.

Pokud je skript stažený z internetu digitálně podepsaný, ale ještě jste se rozhodli důvěřovat jeho vydavateli, PowerShell zobrazí 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 nespouštět nebo Nespouštět. Pokud vyberete "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 libovolného skriptu zkontrolujte každý příkaz 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 zavedená 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, podepsat a spouštět skripty ve vašem počítači. Skript podepsaný certifikátem podepsaným svým držitelem se ale nebude spouštět v jiných počítačích.

Obvykle byste použili certifikát podepsaný svým držitelem 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é budou sdíleny, a to ani 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, aby škodlivé programy podepisují skripty vaším jménem. Pokyny najdete na konci tohoto tématu.

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

Pokud chcete vytvořit certifikát podepsaný svým držitelem, použijte v modulu PKI rutinu New-SelfSignedCertificate . Tento modul se zavádí v PowerShellu 3.0 a je součástí Windows 8 a Windows Server 2012. 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

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

Další informace o syntaxi a popisech MakeCert.exe parametrů nástroje najdete v tématu Nástroj pro vytváření certifikátů (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í. Nejsou potřeba žádné náhrady, 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 privátního klíče. Heslo zajistí, že bez vašeho souhlasu nikdo nebude moct certifikát používat ani k němu přistupovat. Vytvořte a zadejte heslo, které si můžete zapamatovat. Toto heslo použijete později k načtení certifikátu.

Pokud chcete ověřit, že certifikát byl vygenerován 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.

Na příkazovém řá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 v zobrazení, 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 podepsat skripty. Pokud používáte zásadu provádění AllSigned , podepsání skriptu vám umožní spustit skript na počítači.

Následující ukázkový skript podepíše Add-Signature.ps1skript. Pokud ale 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
param([string] $file=$(throw "Please specify a filename."))
$cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
Set-AuthenticodeSignature $file $cert

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

$cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
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, na kterých 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 pro váš privátní klíč

Pokud máte ve svém počítači privátní klíč a certifikát, můžou škodlivé programy za vás 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 .pfx klíče a certifikátu do souboru. Správce certifikátů je součástí sady Microsoft .NET SDK, Microsoft Windows SDK a v Internet Exploreru.

Export certifikátu:

  1. Spusťte Správce certifikátů.
  2. Vyberte certifikát vystavený kořenem místního certifikátu PowerShellu.
  3. Kliknutím na tlačítko Exportovat spusťte Průvodce exportem certifikátu.
  4. Vyberte Ano, export privátního klíče a potom klikněte na Tlačítko Další.
  5. Vyberte Povolit silnou ochranu.
  6. Zadejte heslo a zadejte ho znovu a potvrďte ho.
  7. Zadejte název souboru s příponou .pfx.
  8. Klikněte na Dokončit.

Opětovné importování 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í souboru .pfx, 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 úložiště osobních certifikátů.
  6. Klikněte na 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, zatímco podpisový certifikát byl platný.

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

Viz také