Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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í 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ů pomocí zásad spouštění RemoteSigned
Pokud jsou vaše zásady spouštění PowerShellu RemoteSigned, PowerShell nebude spouštět nepodepsané skripty stažené z internetu, včetně nepodepsaných skriptů, které obdržíte prostřednictvím e-mailu 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.
- Uložte soubor skriptu do počítače.
- Klikněte na tlačítko Start, klikněte na položku Tento počítač a vyhledejte uložený soubor skriptu.
- Klikněte pravým tlačítkem myši na soubor skriptu a pak klikněte na příkaz Vlastnosti.
- 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í vlastnoručně podepsaného certifikátu
Pokud chcete 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 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 soukromého klíče. 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, 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é
Skript musí být uložen v kódování ASCII nebo UTF8NoBOM. Můžete podepsat soubor skriptu, který používá jiné kódování, ale skript se nespustí nebo se nepodaří importovat modul, který skript obsahuje. Skript se také nezdaří, pokud soubor obsahuje znaky Unicode (UTF8).
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 podepsat soubor skriptu Add-Signature.ps1, na příkazovém řádku PowerShellu zadejte 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.
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:
- Spusťte Správce certifikátů.
- Vyberte certifikát vydaný lokálním kořenem certifikátů PowerShellu.
- Kliknutím na tlačítko Exportovat spusťte Průvodce exportem certifikátu.
- Vyberte možnost "Ano, exportovat soukromý klíč" a poté klikněte na tlačítko Další.
- Vyberte "Zapnout silnou ochranu".
- Zadejte heslo a pak ho znovu zadejte, abyste ho potvrdili.
- Zadejte název souboru, který má příponu názvu souboru .pfx.
- Klikněte na Dokončit.
Opětovný import certifikátu:
- Spusťte Správce certifikátů.
- Kliknutím na tlačítko Importovat spusťte Průvodce importem certifikátu.
- Otevřete umístění souboru .pfx, který jste vytvořili během procesu exportu.
- 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.
- Vyberte osobní úložiště certifikátů.
- 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 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.