Informacje o podpisywaniuAbout Signing

Krótki opisShort description

Wyjaśnia, jak podpisać skrypty, aby były zgodne z zasadami wykonywania programu PowerShell.Explains how to sign scripts so that they comply with the PowerShell execution policies.

Długi opisLong description

Zasady wykonywania z ograniczeniami nie zezwalają na uruchamianie skryptów.The Restricted execution policy does not permit any scripts to run. Zasady wykonywania wszystkie podpisane i RemoteSigned uniemożliwiają programowi PowerShell uruchamianie skryptów, które nie mają podpisu cyfrowego.The AllSigned and RemoteSigned execution policies prevent PowerShell from running scripts that do not have a digital signature.

W tym temacie wyjaśniono, jak uruchamiać wybrane skrypty, które nie są podpisane, nawet gdy zasady wykonywania są RemoteSigned i jak podpisać skrypty do własnych potrzeb.This topic explains how to run selected scripts that are not signed, even while the execution policy is RemoteSigned, and how to sign scripts for your own use.

Aby uzyskać więcej informacji na temat zasad wykonywania programu PowerShell, zobacz about_Execution_Policies.For more information about PowerShell execution policies, see about_Execution_Policies.

Aby zezwolić na uruchamianie podpisanych skryptówTo permit signed scripts to run

Po pierwszym uruchomieniu programu PowerShell na komputerze zasady ograniczonego wykonywania (domyślnie) mogą być stosowane.When you start PowerShell on a computer for the first time, the Restricted execution policy (the default) is likely to be in effect.

Zasady z ograniczeniami nie zezwalają na uruchamianie skryptów.The Restricted policy does not permit any scripts to run.

Aby znaleźć efektywne zasady wykonywania na komputerze, wpisz:To find the effective execution policy on your computer, type:

Get-ExecutionPolicy

Aby uruchamiać niepodpisane skrypty zapisane na komputerze lokalnym i podpisane skrypty od innych użytkowników, uruchom program PowerShell z opcją Uruchom jako administrator, a następnie użyj następującego polecenia, aby zmienić zasady wykonywania na komputerze na RemoteSigned:To run unsigned scripts that you write on your local computer and signed scripts from other users, start PowerShell with the Run as Administrator option and then use the following command to change the execution policy on the computer to RemoteSigned:

Set-ExecutionPolicy RemoteSigned

Aby uzyskać więcej informacji, zobacz temat pomocy dla Set-ExecutionPolicy polecenia cmdlet.For more information, see the help topic for the Set-ExecutionPolicy cmdlet.

Uruchamianie niepodpisanych skryptów przy użyciu zasad wykonywania RemoteSignedRunning unsigned scripts using the RemoteSigned execution policy

Jeśli zasady wykonywania programu PowerShell są RemoteSigned, program PowerShell nie będzie uruchamiać niepodpisanych skryptów pobranych z Internetu, w tym niepodpisanych skryptów otrzymywanych za pośrednictwem poczty e-mail i programów do obsługi wiadomości błyskawicznych.If your PowerShell execution policy is RemoteSigned, PowerShell will not run unsigned scripts that are downloaded from the internet, including unsigned scripts you receive through email and instant messaging programs.

Jeśli spróbujesz uruchomić pobrany skrypt, program PowerShell wyświetli następujący komunikat o błędzie:If you try to run a downloaded script, PowerShell displays the following error message:

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.

Przed uruchomieniem skryptu zapoznaj się z kodem, aby upewnić się, że ufasz.Before you run the script, review the code to be sure that you trust it. Skrypty mają taki sam efekt jak każdy program wykonywalny.Scripts have the same effect as any executable program.

Aby uruchomić niepodpisany skrypt, użyj polecenia cmdlet Unblock-File lub wykonaj poniższą procedurę.To run an unsigned script, use the Unblock-File cmdlet or use the following procedure.

  1. Zapisz plik skryptu na komputerze.Save the script file on your computer.
  2. Kliknij przycisk Start, kliknij pozycję mój komputer, a następnie Znajdź zapisany plik skryptu.Click Start, click My Computer, and locate the saved script file.
  3. Kliknij prawym przyciskiem myszy plik skryptu, a następnie kliknij polecenie Właściwości.Right-click the script file, and then click Properties.
  4. Kliknij przycisk Odblokuj.Click Unblock.

Jeśli skrypt pobrany z Internetu jest podpisany cyfrowo, ale jeszcze nie wybrano zaufania wydawcy, program PowerShell wyświetla następujący komunikat:If a script that was downloaded from the internet is digitally signed, but you have not yet chosen to trust its publisher, PowerShell displays the following message:

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

Jeśli ufasz wydawcy, wybierz pozycję "Uruchom raz" lub "Zawsze uruchamiaj".If you trust the publisher, select "Run once" or "Always run." Jeśli Wydawca nie jest zaufany, wybierz opcję "nigdy nie uruchamiaj" lub "nie uruchamiaj".If you do not trust the publisher, select either "Never run" or "Do not run." W przypadku wybrania opcji "nigdy nie uruchamiaj" lub "Zawsze uruchamiaj" program PowerShell nie wyświetli monitu ponownie dla tego wydawcy.If you select "Never run" or "Always run," PowerShell will not prompt you again for this publisher.

Metody podpisywania skryptówMethods of signing scripts

Można podpisać skrypty zapisane i skrypty uzyskane z innych źródeł.You can sign the scripts that you write and the scripts that you obtain from other sources. Przed podpisaniem dowolnego skryptu Sprawdź każde polecenie, aby upewnić się, że jest bezpieczne do uruchomienia.Before you sign any script, examine each command to verify that it is safe to run.

Aby zapoznać się z najlepszymi rozwiązaniami dotyczącymi podpisywania kodu, zobacz najlepsze rozwiązania dotyczące podpisywania kodu.For best practices about code signing, see Code-Signing Best Practices.

Aby uzyskać więcej informacji o sposobach podpisywania pliku skryptu, zobacz Set-AuthenticodeSignature.For more information about how to sign a script file, see Set-AuthenticodeSignature.

New-SelfSignedCertificatePolecenie cmdlet wprowadzone w module PKI w programie PowerShell 3,0 tworzy certyfikat z podpisem własnym, który jest odpowiedni do testowania.The New-SelfSignedCertificate cmdlet, introduced in the PKI module in PowerShell 3.0, creates a self-signed certificate that is Appropriate for testing. Aby uzyskać więcej informacji, zobacz temat pomocy dla polecenia cmdlet New-SelfSignedCertificate.For more information, see the help topic for the New-SelfSignedCertificate cmdlet.

Aby dodać podpis cyfrowy do skryptu, należy podpisać go przy użyciu certyfikatu podpisywania kodu.To add a digital signature to a script, you must sign it with a code signing certificate. Dwa typy certyfikatów są odpowiednie do podpisywania pliku skryptu:Two types of certificates are suitable for signing a script file:

  • Certyfikaty, które są tworzone przez urząd certyfikacji: w celu uzyskania opłaty publiczny urząd certyfikacji weryfikuje swoją tożsamość i daje certyfikat podpisywania kodu.Certificates that are created by a certification authority: For a fee, a public certification authority verifies your identity and gives you a code signing certificate. Po zakupieniu certyfikatu od wiarygodnego urzędu certyfikacji można udostępnić skrypt użytkownikom na innych komputerach z systemem Windows, ponieważ te inne komputery ufają urzędowi certyfikacji.When you purchase your certificate from a reputable certification authority, you are able to share your script with users on other computers that are running Windows because those other computers trust the certification authority.

  • Utworzone certyfikaty: można utworzyć certyfikat z podpisem własnym, dla którego komputer jest urzędem, który tworzy certyfikat.Certificates that you create: You can create a self-signed certificate for which your computer is the authority that creates the certificate. Ten certyfikat jest bezpłatny i umożliwia pisanie, podpisywanie i uruchamianie skryptów na komputerze.This certificate is free of charge and enables you to write, sign, and run scripts on your computer. Jednak skrypt podpisany przez certyfikat z podpisem własnym nie zostanie uruchomiony na innych komputerach.However, a script signed by a self-signed certificate will not run on other computers.

Zazwyczaj certyfikat z podpisem własnym należy używać tylko w celu podpisywania skryptów, które są pisane do własnego użytku, oraz do podpisywania skryptów uzyskanych z innych źródeł, które zostały zweryfikowane jako bezpieczne.Typically, you would use a self-signed certificate only to sign scripts that you write for your own use and to sign scripts that you get from other sources that you have verified to be safe. Nie jest ona odpowiednia dla skryptów, które będą udostępniane, nawet w ramach przedsiębiorstwa.It is not appropriate for scripts that will be shared, even within an enterprise.

Jeśli tworzysz certyfikat z podpisem własnym, pamiętaj o włączeniu silnej ochrony klucza prywatnego w certyfikacie.If you create a self-signed certificate, be sure to enable strong private key protection on your certificate. Zapobiega to złośliwym programom w wykonywaniu skryptów podpisywania w Twoim imieniu.This prevents malicious programs from signing scripts on your behalf. Instrukcje są zawarte na końcu tego tematu.The instructions are included at the end of this topic.

Tworzenie certyfikatu z podpisem własnymCreate a self-signed certificate

Aby utworzyć certyfikat z podpisem własnym, należy użyć New-SelfSignedCertificate polecenia cmdlet w module PKI.To create a self-signed certificate, use the New-SelfSignedCertificate cmdlet in the PKI module. Ten moduł został wprowadzony w programie PowerShell 3,0 i jest dołączony do systemu Windows 8 i Windows Server 2012.This module is introduced in PowerShell 3.0 and is included in Windows 8 and Windows Server 2012. Aby uzyskać więcej informacji, zobacz temat pomocy dla New-SelfSignedCertificate polecenia cmdlet.For more information, see the help topic for the New-SelfSignedCertificate cmdlet.

Aby utworzyć certyfikat z podpisem własnym we wcześniejszych wersjach systemu Windows, użyj narzędzia do tworzenia certyfikatów MakeCert.exe .To create a self-signed certificate in earlier versions of Windows, use the Certificate Creation tool MakeCert.exe. To narzędzie jest zawarte w zestawie SDK Microsoft .NET (wersje 1,1 i nowsze) oraz w Microsoft Windows SDK.This tool is included in the Microsoft .NET SDK (versions 1.1 and later) and in the Microsoft Windows SDK.

Aby uzyskać więcej informacji na temat składni i opisów parametrów narzędzia MakeCert.exe, zobacz Narzędzie do tworzenia certyfikatów (MakeCert.exe).For more information about the syntax and the parameter descriptions of the MakeCert.exe tool, see Certificate Creation Tool (MakeCert.exe).

Aby za pomocą narzędzia MakeCert.exe utworzyć certyfikat, uruchom następujące polecenia w oknie wiersza polecenia zestawu SDK.To use the MakeCert.exe tool to create a certificate, run the following commands in an SDK Command Prompt window.

Uwaga: pierwsze polecenie tworzy lokalny urząd certyfikacji dla danego komputera.Note: The first command creates a local certification authority for your computer. Drugie polecenie generuje certyfikat osobisty od urzędu certyfikacji.The second command generates a personal certificate from the certification authority.

Uwaga: polecenia można kopiować lub wpisywać dokładnie tak, jak pojawiają się.Note: You can copy or type the commands exactly as they appear. Nie są wymagane podstawiania, chociaż można zmienić nazwę certyfikatu.No substitutions are necessary, although you can change the certificate name.

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

Narzędzie MakeCert.exe wyświetli monit o podanie hasła klucza prywatnego.The MakeCert.exe tool will prompt you for a private key password. Hasło zapewnia, że nikt nie może używać certyfikatu ani uzyskać do niego dostępu bez zgody użytkownika.The password ensures that no one can use or access the certificate without your consent. Utwórz i wprowadź hasło, które można zapamiętać.Create and enter a password that you can remember. To hasło będzie używane później do pobrania certyfikatu.You will use this password later to retrieve the certificate.

Aby sprawdzić, czy certyfikat został wygenerowany prawidłowo, użyj następującego polecenia, aby pobrać certyfikat z magazynu certyfikatów na komputerze.To verify that the certificate was generated correctly, use the following command to get the certificate in the certificate store on the computer. Plik certyfikatu nie zostanie znaleziony w katalogu systemu plików.You will not find a certificate file in the file system directory.

W wierszu polecenia programu PowerShell wpisz:At the PowerShell prompt, type:

Get-ChildItem cert:\CurrentUser\my -codesigning

To polecenie używa dostawcy certyfikatów programu PowerShell do wyświetlania informacji o certyfikacie.This command uses the PowerShell Certificate provider to view information about the certificate.

Jeśli certyfikat został utworzony, w danych wyjściowych zostanie wyświetlony odcisk palca , który identyfikuje certyfikat na ekranie podobnym do następującego:If the certificate was created, the output shows the thumbprint that identifies the certificate in a display that resembles the following:

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

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

Podpisz skryptSign a script

Po utworzeniu certyfikatu z podpisem własnym można podpisać skrypty.After you create a self-signed certificate, you can sign scripts. Jeśli używasz zasad wykonywania wszystkie podpisane , podpisanie skryptu umożliwi uruchomienie skryptu na komputerze.If you use the AllSigned execution policy, signing a script permits you to run the script on your computer.

Poniższy przykładowy skrypt, Add-Signature.ps1 podpisuje skrypt.The following sample script, Add-Signature.ps1, signs a script. Jeśli jednak korzystasz z zasad wykonywania wszystkie podpisane , musisz podpisać Add-Signature.ps1 skrypt przed jego uruchomieniem.However, if you are using the AllSigned execution policy, you must sign the Add-Signature.ps1 script before you run it.

Ważne

Skrypt musi być zapisany przy użyciu kodowania ASCII lub UTF8NoBOM. Plik skryptu można podpisać przy użyciu innego kodowania.The script must be saved using ASCII or UTF8NoBOM encoding.You can sign a script file that uses a different encoding. Nie można jednak uruchomić skryptu lub nie można zaimportować modułu zawierającego skrypt.But the script fails to run or the module containing the script fails to import.

Aby użyć tego skryptu, Skopiuj poniższy tekst do pliku tekstowego, a następnie nadaj mu nazwę Add-Signature.ps1 .To use this script, copy the following text into a text file, and name it 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

Aby podpisać Add-Signature.ps1 plik skryptu, wpisz następujące polecenia w wierszu polecenia programu PowerShell:To sign the Add-Signature.ps1 script file, type the following commands at the PowerShell command prompt:

$cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
Set-AuthenticodeSignature add-signature.ps1 $cert

Po podpisaniu skryptu można uruchomić go na komputerze lokalnym.After the script is signed, you can run it on the local computer. Skrypt nie zostanie jednak uruchomiony na komputerach, na których zasady wykonywania programu PowerShell wymagają podpisu cyfrowego z zaufanego urzędu.However, the script will not run on computers on which the PowerShell execution policy requires a digital signature from a trusted authority. Jeśli spróbujesz, program PowerShell wyświetli następujący komunikat o błędzie:If you try, PowerShell displays the following error message:

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

Jeśli program PowerShell wyświetli ten komunikat podczas uruchamiania skryptu, który nie został zapisany, Traktuj plik jako traktowany jako niepodpisany skrypt.If PowerShell displays this message when you run a script that you did not write, treat the file as you would treat any unsigned script. Przejrzyj kod, aby określić, czy można ufać skryptowi.Review the code to determine whether you can trust the script.

Włącz silną ochronę klucza prywatnego dla certyfikatuEnable strong private key protection for your certificate

Jeśli na komputerze znajduje się certyfikat prywatny, złośliwe programy mogą być w stanie podpisać skrypty w Twoim imieniu, co upoważnia program PowerShell do ich uruchamiania.If you have a private certificate on your computer, malicious programs might be able to sign scripts on your behalf, which authorizes PowerShell to run them.

Aby zapobiec automatycznemu logowaniu w Twoim imieniu, użyj Menedżera certyfikatów Certmgr.exe do eksportowania certyfikatu podpisywania do .pfx pliku.To prevent automated signing on your behalf, use Certificate Manager Certmgr.exe to export your signing certificate to a .pfx file. Menedżer certyfikatów jest dołączony do zestawu SDK Microsoft .NET, Microsoft Windows SDK i programu Internet Explorer.Certificate Manager is included in the Microsoft .NET SDK, the Microsoft Windows SDK, and in internet Explorer.

Aby wyeksportować certyfikat:To export the certificate:

  1. Uruchom Menedżera certyfikatów.Start Certificate Manager.
  2. Wybierz certyfikat wystawiony przez lokalny urząd certyfikacji programu PowerShell.Select the certificate issued by PowerShell Local Certificate Root.
  3. Kliknij przycisk Eksportuj, aby uruchomić Kreatora eksportu certyfikatów.Click Export to start the Certificate Export Wizard.
  4. Wybierz opcję "tak, eksportuj klucz prywatny", a następnie kliknij przycisk Dalej.Select "Yes, export the private key", and then click Next.
  5. Wybierz pozycję "Włącz silną ochronę".Select "Enable strong protection."
  6. Wpisz hasło, a następnie wpisz je ponownie, aby potwierdzić.Type a password, and then type it again to confirm.
  7. Wpisz nazwę pliku, który ma rozszerzenie nazwy pliku. pfx.Type a file name that has the .pfx file name extension.
  8. Kliknij przycisk Zakończ.Click Finish.

Aby ponownie zaimportować certyfikat:To re-import the certificate:

  1. Uruchom Menedżera certyfikatów.Start Certificate Manager.
  2. Kliknij przycisk Importuj, aby uruchomić Kreatora importu certyfikatów.Click Import to start the Certificate Import Wizard.
  3. Otwórz w lokalizacji pliku PFX, który został utworzony podczas procesu eksportowania.Open to the location of the .pfx file that you created during the export process.
  4. Na stronie hasło wybierz opcję "Włącz silną ochronę klucza prywatnego", a następnie wprowadź hasło przypisane podczas procesu eksportowania.On the Password page, select "Enable strong private key protection", and then enter the password that you assigned during the export process.
  5. Wybierz osobisty magazyn certyfikatów.Select the Personal certificate store.
  6. Kliknij przycisk Zakończ.Click Finish.

Zapobiegaj wygaśnięciu podpisuPrevent the signature from expiring

Podpis cyfrowy w skrypcie jest ważny do momentu wygaśnięcia certyfikatu podpisywania lub tak długo, jak serwer sygnatur czasowych może sprawdzić, czy skrypt został podpisany, gdy certyfikat podpisywania był prawidłowy.The digital signature in a script is valid until the signing certificate expires or as long as a timestamp server can verify that the script was signed while the signing certificate was valid.

Ponieważ większość certyfikatów podpisywania jest ważna tylko przez jeden rok, użycie serwera sygnatury czasowej gwarantuje, że użytkownicy będą mogli korzystać ze skryptu przez wiele lat.Because most signing certificates are valid for one year only, using a time stamp server ensures that users can use your script for many years to come.

Zobacz teżSee also

about_Execution_Policiesabout_Execution_Policies

about_Profilesabout_Profiles

Get-ExecutionPolicyGet-ExecutionPolicy

Set-ExecutionPolicySet-ExecutionPolicy

Set-AuthenticodeSignatureSet-AuthenticodeSignature

Wprowadzenie do podpisywania koduIntroduction to Code Signing