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

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

Toto téma vysvětluje, jak spouštět vybrané skripty, které nejsou podepsané, i když je zásada spouštění RemoteSigned, a 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 budou pravděpodobně platit zásady omezeného spouštění (výchozí).

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Ů (ZÁSADY SPOUŠTĚNÍ REMOTESIGNED)

Pokud jsou vaše zásady spouštění PowerShellu RemoteSigned, Windows PowerShell nespustí nepodepsané skripty stažené z internetu, včetně nepodepsaných skriptů, které obdržíte prostřednictvím e-mailů a programů pro rychlé zasílání 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.

Chcete-li 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. Klikněte na tlačítko Start, klikněte na položku Tento počítač a vyhledejte uložený soubor skriptu.
  3. Klikněte pravým tlačítkem myši na soubor skriptu a pak klikněte na příkaz Vlastnosti.
  4. Klikněte na možnost 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 možnost "Spustit jednou" nebo "Vždy spustit". Pokud vydavateli nedůvěřujete, vyberte možnost "Nikdy nespouštět" nebo "Nespouštět". Pokud vyberete možnost Nikdy nespouštět nebo Vždy spouštět, PowerShell vás znovu nezobrazí výzvu pro 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 každý příkaz a ověřte, zda je bezpečné jej 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 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 k rutině 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é 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 škodlivým programům podepisovat skripty vaším jménem. Pokyny jsou uvedeny na konci tohoto tématu.

VYTVOŘENÍ SELF-SIGNED CERTIFIKÁTU

Chcete-li vytvořit certifikát podepsaný svým držitelem, použijte rutinu New-SelfSignedCertificate v modulu PKI. Tento modul je zaveden v PowerShellu 3.0 a je součástí Windows 8 a Windows Server 2012. Další informace najdete v tématu nápovědy k rutině New-SelfSignedCertificate.

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 Framework SDK (verze 1.1 a novější) a Microsoft Windows SDK.

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

Chcete-li 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ří pro váš počítač místní certifikační úřad. Druhý příkaz vygeneruje osobní certifikát od certifikační autority.

Poznámka: Příkazy můžete kopírovat nebo psát 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 sha1 `
-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 sha1 `
-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 soukromé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. Toto heslo později použijete k získání certifikátu.

Chcete-li ověřit, zda byl certifikát vygenerován správně, použijte následující příkaz k získání certifikátu do úložiště certifikátů v počítači. (V adresáři souborového systému 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, zobrazí se ve výstupu kryptografický otisk, který identifikuje certifikát, na displeji podobném 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žíváte zásadu spouštění AllSigned, podepsání skriptu vám umožní spustit skript v počítači.

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

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

Chcete-li soubor skriptu Add-Signature.ps1 podepsat, 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 jej můžete spustit v místním počítači. Skript se ale nespustí v 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 nenapsali, zacházejte se souborem stejně jako s jakýmkoli nepodepsaným skriptem. Zkontrolujte kód a zjistěte, jestli můžete skript důvěřovat.

POVOLTE SILNOU OCHRANU PRIVÁTNÍHO KLÍČE PRO VÁŠ CERTIFIKÁT

Pokud máte v počítači privátní certifikát, škodlivé programy mohou být schopny podepsat skripty vaším jménem, což opravňuje PowerShell k jejich spuštění.

Chcete-li zabránit automatickému podepisování vaším jménem, exportujte podpisový certifikát do souboru .pfx pomocí Správce certifikátů (Certmgr.exe). Správce certifikátů je součástí sady Microsoft .NET Framework SDK, Microsoft Windows SDK a Internet Exploreru 5.0 a novějších verzí.

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 tlačítko Exportovat spusťte Průvodce exportem certifikátu.
  4. Vyberte možnost "Ano, exportovat soukromý klíč" a poté klikněte na tlačítko Další.
  5. Vyberte "Zapnout 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 Dokončit.

Opětovný import certifikátu:

  1. Spusťte Správce certifikátů.
  2. Kliknutím na tlačítko Importovat spusť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 možnost "Povolit silnou ochranu soukromého klíče" a poté zadejte heslo, které jste přiřadili během procesu exportu.
  5. Vyberte osobní úložiště certifikátů.
  6. Klikněte na Dokončit.

ZABRÁNĚNÍ VYPRŠENÍ PLATNOSTI PODPISU

Digitální podpis ve skriptu je platný, dokud nevyprší platnost podpisového certifikátu nebo dokud server časových razítek může ověřit, že skript byl podepsán v době, kdy byl podpisový certifikát platný.

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É

o_Prováděcích_Politikách

about_Profiles

Get-ExecutionPolicy

Set-ExecutionPolicy

Nastavit-AuthenticodePodpis

Úvod do podepisování kódu