Sdílet prostřednictvím


O podepisování

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 spouštění AllSigned a RemoteSigned brání spuštění skriptů, které nemají digitální podpis.

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

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

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

Při prvním spuštění PowerShellu na počítači bude pravděpodobně platit zásada spuštění Restricted, což je výchozí nastavení.

Zásada Omezeno nepovoluje spouštění žádných skriptů.

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

Get-ExecutionPolicy

Pokud chcete spouštět nepodepsané skripty, které napíšete v 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 spouštění v počítači na RemoteSigned:

Set-ExecutionPolicy RemoteSigned

Další informace najdete v tématu nápovědy pro cmdlet 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 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 tlačítko Vlastnosti.
  4. Klikněte na Odblokovat.

Pokud je skript stažený z internetu digitálně podepsaný, ale ještě jste se nerozhodli 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 Nespouštět nikdy nebo Nespouštět. Pokud vyberete Nikdy nespouštět nebo Vždy spustit, PowerShell vás k zadání tohoto vydavatele znovu nezobrazí.

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 týkající se podepisování kódu naleznete v části Code-Signing Osvědčené postupy.

Další informace o tom, jak podepsat soubor 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 cmdlet 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žívali pouze k podepisování skriptů, které píšete pro vlastní potřebu, a k podepisování skriptů, které získáte z jiných zdrojů a u kterých jste ověřili, že jsou 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í vlastnoručně podepsaného certifikátu

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 cmdlet 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 pro vytvoření certifikátu MakeCert.exe. 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 parametrů nástroje MakeCert.exe naleznete v tématu Nástroj pro vytvoření certifikátu (MakeCert.exe).

Pokud chcete k vytvoření certifikátu použít nástroj MakeCert.exe, 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í 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 ]

Podepište skript

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

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

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 soubor skriptu Add-Signature.ps1, na příkazovém řádku PowerShellu zadejte 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 certifikátů Certmgr.exe 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ý lokálním kořenem certifikátů PowerShellu.
  3. Kliknutím na Exportovat spusť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 názvu souboru .pfx.
  8. Klikněte na Finish (Dokončit).

Opětovný import certifikátu:

  1. Spusťte Správce certifikátů.
  2. Kliknutím na Importovat spusťte Průvodce importem certifikátu.
  3. Otevřete složku, ve které se nachází soubor .pfx, který jste vytvořili během procesu exportu.
  4. Na stránce Heslo vyberte Povolit silnou ochranu privátních klíčů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é