Om signeringAbout Signing

Kort beskrivningShort description

Förklarar hur du signerar skript så att de följer PowerShell-körnings principerna.Explains how to sign scripts so that they comply with the PowerShell execution policies.

Lång beskrivningLong description

Principen för begränsade körningar tillåter inte att skript körs.The Restricted execution policy does not permit any scripts to run. AllSigned -och RemoteSigned -körnings principerna förhindrar att PowerShell kör skript som inte har någon digital signatur.The AllSigned and RemoteSigned execution policies prevent PowerShell from running scripts that do not have a digital signature.

I det här avsnittet beskrivs hur du kör valda skript som inte är signerade, även om körnings principen är RemoteSigned och hur du signerar skript för egen användning.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.

Mer information om körnings principer för PowerShell finns i about_Execution_Policies.For more information about PowerShell execution policies, see about_Execution_Policies.

Tillåta att signerade skript körsTo permit signed scripts to run

När du startar PowerShell på en dator för första gången är den begränsade körnings principen (standard) förmodligen aktiv.When you start PowerShell on a computer for the first time, the Restricted execution policy (the default) is likely to be in effect.

Den begränsade principen tillåter inte att skript körs.The Restricted policy does not permit any scripts to run.

Du hittar den effektiva körnings principen på datorn genom att skriva:To find the effective execution policy on your computer, type:

Get-ExecutionPolicy

Om du vill köra osignerade skript som du skriver på din lokala dator och signerade skript från andra användare, startar du PowerShell med alternativet Kör som administratör och använder sedan följande kommando för att ändra körnings principen på datorn till 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

Mer information finns i hjälp avsnittet för Set-ExecutionPolicy cmdleten.For more information, see the help topic for the Set-ExecutionPolicy cmdlet.

Köra osignerade skript med körnings principen för RemoteSignedRunning unsigned scripts using the RemoteSigned execution policy

Om din PowerShell-körnings princip är RemoteSigned kör PowerShell inte osignerade skript som hämtas från Internet, inklusive osignerade skript som du får via e-post och snabb meddelande program.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.

Om du försöker köra ett nedladdat skript visas följande fel meddelande i PowerShell: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.

Innan du kör skriptet bör du granska koden för att vara säker på att du litar på den.Before you run the script, review the code to be sure that you trust it. Skript har samma resultat som alla körbara program.Scripts have the same effect as any executable program.

Om du vill köra ett osignerat skript använder du Unblock-File-cmdleten eller så använder du följande procedur.To run an unsigned script, use the Unblock-File cmdlet or use the following procedure.

  1. Spara skript filen på datorn.Save the script file on your computer.
  2. Klicka på Start, klicka på den här datorn och leta upp den sparade skript filen.Click Start, click My Computer, and locate the saved script file.
  3. Högerklicka på skript filen och klicka sedan på egenskaper.Right-click the script file, and then click Properties.
  4. Klicka på avblockera.Click Unblock.

Om ett skript som hämtades från Internet har signerats digitalt, men du ännu inte har valt att lita på utgivaren, visas följande meddelande i PowerShell: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"):

Om du litar på utgivaren väljer du kör en gång eller kör alltid.If you trust the publisher, select "Run once" or "Always run." Om du inte litar på utgivaren väljer du antingen "Kör aldrig" eller "kör inte".If you do not trust the publisher, select either "Never run" or "Do not run." Om du väljer "aldrig körning" eller "kör alltid" uppmanas du inte att göra det igen för den här utgivaren.If you select "Never run" or "Always run," PowerShell will not prompt you again for this publisher.

Metoder för signering av skriptMethods of signing scripts

Du kan signera de skript som du skriver och skript som du hämtar från andra källor.You can sign the scripts that you write and the scripts that you obtain from other sources. Innan du signerar ett skript kontrollerar du varje kommando för att kontrol lera att det är säkert att köra.Before you sign any script, examine each command to verify that it is safe to run.

Bästa praxis om kod signering finns i metod tips för kod signering.For best practices about code signing, see Code-Signing Best Practices.

Mer information om hur du signerar en skript fil finns i set-AuthenticodeSignature.For more information about how to sign a script file, see Set-AuthenticodeSignature.

New-SelfSignedCertificateCmdleten, som introducerades i PKI-modulen i PowerShell 3,0, skapar ett självsignerat certifikat som är lämpligt för testning.The New-SelfSignedCertificate cmdlet, introduced in the PKI module in PowerShell 3.0, creates a self-signed certificate that is Appropriate for testing. Mer information finns i hjälp avsnittet för New-SelfSignedCertificate-cmdleten.For more information, see the help topic for the New-SelfSignedCertificate cmdlet.

Om du vill lägga till en digital signatur i ett skript måste du signera den med ett kod signerings certifikat.To add a digital signature to a script, you must sign it with a code signing certificate. Två typer av certifikat är lämpliga för signering av en skript fil:Two types of certificates are suitable for signing a script file:

  • Certifikat som har skapats av en certifikat utfärdare: för en avgift verifierar en offentlig certifikat utfärdare din identitet och ger dig ett kod signerings certifikat.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. När du köper ditt certifikat från en betrodd certifikat utfärdare kan du dela ditt skript med användare på andra datorer som kör Windows eftersom de andra datorerna litar på certifikat utfärdaren.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.

  • Certifikat som du skapar: du kan skapa ett självsignerat certifikat för vilket datorn är den myndighet som skapar certifikatet.Certificates that you create: You can create a self-signed certificate for which your computer is the authority that creates the certificate. Det här certifikatet är kostnads fritt och du kan skriva, signera och köra skript på din dator.This certificate is free of charge and enables you to write, sign, and run scripts on your computer. Ett skript som signerats av ett självsignerat certifikat kommer dock inte att köras på andra datorer.However, a script signed by a self-signed certificate will not run on other computers.

Normalt använder du bara ett självsignerat certifikat för att signera skript som du skriver för eget bruk och för att signera skript som du får från andra källor som du har kontrollerat är säkra.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. Det är inte lämpligt för skript som ska delas, även inom ett företag.It is not appropriate for scripts that will be shared, even within an enterprise.

Om du skapar ett självsignerat certifikat måste du Aktivera starkt skydd av den privata nyckeln på ditt certifikat.If you create a self-signed certificate, be sure to enable strong private key protection on your certificate. Detta förhindrar att skadliga program signerar skript åt dig.This prevents malicious programs from signing scripts on your behalf. Anvisningarna finns i slutet av det här avsnittet.The instructions are included at the end of this topic.

Skapa ett självsignerat certifikatCreate a self-signed certificate

Om du vill skapa ett självsignerat certifikat använder du New-SelfSignedCertificate cmdleten i PKI-modulen.To create a self-signed certificate, use the New-SelfSignedCertificate cmdlet in the PKI module. Den här modulen introduceras i PowerShell 3,0 och ingår i Windows 8 och Windows Server 2012.This module is introduced in PowerShell 3.0 and is included in Windows 8 and Windows Server 2012. Mer information finns i hjälp avsnittet för New-SelfSignedCertificate cmdleten.For more information, see the help topic for the New-SelfSignedCertificate cmdlet.

Om du vill skapa ett självsignerat certifikat i tidigare versioner av Windows använder du verktyget för att skapa certifikat MakeCert.exe .To create a self-signed certificate in earlier versions of Windows, use the Certificate Creation tool MakeCert.exe. Det här verktyget ingår i Microsoft .NET SDK (version 1,1 och senare) och i Microsoft Windows SDK.This tool is included in the Microsoft .NET SDK (versions 1.1 and later) and in the Microsoft Windows SDK.

Mer information om syntaxen och parameter beskrivningarna för MakeCert.exe-verktyget finns i verktyget för att Skapa certifikat (MakeCert.exe).For more information about the syntax and the parameter descriptions of the MakeCert.exe tool, see Certificate Creation Tool (MakeCert.exe).

Om du vill använda MakeCert.exe-verktyget för att skapa ett certifikat kör du följande kommandon i ett kommando tolks fönster för SDK.To use the MakeCert.exe tool to create a certificate, run the following commands in an SDK Command Prompt window.

Obs: det första kommandot skapar en lokal certifikat utfärdare för datorn.Note: The first command creates a local certification authority for your computer. Det andra kommandot genererar ett personligt certifikat från certifikat utfärdaren.The second command generates a personal certificate from the certification authority.

Obs: du kan kopiera eller skriva kommandon exakt som de visas.Note: You can copy or type the commands exactly as they appear. Inga ersättningar krävs, men du kan ändra certifikat namnet.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

I MakeCert.exes verktyget uppmanas du att ange ett lösen ord för den privata nyckeln.The MakeCert.exe tool will prompt you for a private key password. Lösen ordet garanterar att ingen kan använda eller komma åt certifikatet utan ditt medgivande.The password ensures that no one can use or access the certificate without your consent. Skapa och ange ett lösen ord som du kan komma ihåg.Create and enter a password that you can remember. Du kommer att använda det här lösen ordet senare för att hämta certifikatet.You will use this password later to retrieve the certificate.

Kontrol lera att certifikatet har genererats korrekt genom att använda följande kommando för att hämta certifikatet i certifikat arkivet på datorn.To verify that the certificate was generated correctly, use the following command to get the certificate in the certificate store on the computer. Du kommer inte att hitta någon certifikat fil i fil system katalogen.You will not find a certificate file in the file system directory.

I PowerShell-prompten skriver du:At the PowerShell prompt, type:

Get-ChildItem cert:\CurrentUser\my -codesigning

Detta kommando använder PowerShell-certifikat leverantören för att visa information om certifikatet.This command uses the PowerShell Certificate provider to view information about the certificate.

Om certifikatet har skapats visar utdata det tumavtryck som identifierar certifikatet i en bildskärm som liknar följande: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 ]

Signera ett skriptSign a script

När du har skapat ett självsignerat certifikat kan du signera skript.After you create a self-signed certificate, you can sign scripts. Om du använder AllSigned körnings princip kan du signera ett skript för att köra skriptet på datorn.If you use the AllSigned execution policy, signing a script permits you to run the script on your computer.

Följande exempel skript, Add-Signature.ps1 signerar ett skript.The following sample script, Add-Signature.ps1, signs a script. Om du använder AllSigned körnings princip måste du dock signera Add-Signature.ps1 skriptet innan du kör det.However, if you are using the AllSigned execution policy, you must sign the Add-Signature.ps1 script before you run it.

Viktigt

Skriptet måste sparas med ASCII-eller UTF8NoBOM-kodning.The script must be saved using ASCII or UTF8NoBOM encoding. Du kan signera en skript fil som använder en annan kodning.You can sign a script file that uses a different encoding. Men skriptet kan inte köras eller också går det inte att importera den modul som innehåller skriptet.But the script fails to run or the module containing the script fails to import.

Om du vill använda det här skriptet kopierar du följande text till en textfil och namnger den 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

Om du vill signera Add-Signature.ps1 skript filen skriver du följande kommandon i PowerShell-kommando tolken: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

När skriptet har signerats kan du köra det på den lokala datorn.After the script is signed, you can run it on the local computer. Men skriptet kan inte köras på datorer där PowerShell-körnings principen kräver en digital signatur från en betrodd utfärdare.However, the script will not run on computers on which the PowerShell execution policy requires a digital signature from a trusted authority. Om du försöker igen visas följande fel meddelande i PowerShell: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 <<<<

Om PowerShell visar det här meddelandet när du kör ett skript som du inte har skrivit, behandla filen som du skulle behandla alla osignerade skript.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. Granska koden för att avgöra om du kan lita på skriptet.Review the code to determine whether you can trust the script.

Aktivera starkt skydd av den privata nyckeln för ditt certifikatEnable strong private key protection for your certificate

Om du har ett privat certifikat på datorn kan skadliga program kunna signera skript åt dig, vilket ger PowerShell möjlighet att köra dem.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.

Använd Certificate Manager Certmgr.exe för att exportera ditt signerings certifikat till en fil för att förhindra automatisk signering för din räkning .pfx .To prevent automated signing on your behalf, use Certificate Manager Certmgr.exe to export your signing certificate to a .pfx file. Certifikat hanteraren ingår i Microsoft .NET SDK, Microsoft Windows SDK och i Internet Explorer.Certificate Manager is included in the Microsoft .NET SDK, the Microsoft Windows SDK, and in internet Explorer.

Så här exporterar du certifikatet:To export the certificate:

  1. Starta certifikat hanteraren.Start Certificate Manager.
  2. Välj det certifikat som utfärdats av den lokala PowerShell-certifikat roten.Select the certificate issued by PowerShell Local Certificate Root.
  3. Klicka på Exportera för att starta guiden Exportera certifikat.Click Export to start the Certificate Export Wizard.
  4. Välj "Ja, exportera den privata nyckeln" och klicka sedan på Nästa.Select "Yes, export the private key", and then click Next.
  5. Välj "Aktivera starkt skydd".Select "Enable strong protection."
  6. Skriv ett lösen ord och skriv det igen för att bekräfta.Type a password, and then type it again to confirm.
  7. Ange ett fil namn som har fil namns tillägget. pfx.Type a file name that has the .pfx file name extension.
  8. Klicka på Slutför.Click Finish.

Så här importerar du certifikatet på nytt:To re-import the certificate:

  1. Starta certifikat hanteraren.Start Certificate Manager.
  2. Klicka på Importera för att starta guiden Importera certifikat.Click Import to start the Certificate Import Wizard.
  3. Öppna till platsen för den. pfx-fil som du skapade under export processen.Open to the location of the .pfx file that you created during the export process.
  4. På sidan lösen ord väljer du Aktivera starkt skydd av den privata nyckeln och anger sedan det lösen ord som du tilldelade under export processen.On the Password page, select "Enable strong private key protection", and then enter the password that you assigned during the export process.
  5. Välj det personliga certifikat arkivet.Select the Personal certificate store.
  6. Klicka på Slutför.Click Finish.

Förhindra att signaturen upphör att gällaPrevent the signature from expiring

Den digitala signaturen i ett skript är giltig tills signerings certifikatet upphör att gälla eller så länge en tids stämplings Server kan verifiera att skriptet signerades medan signerings certifikatet var giltigt.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.

Eftersom de flesta signerings certifikaten endast är giltiga i ett år, garanterar att användarna kan använda ditt skript i flera år för att komma åt dem med hjälp av en tids stämplings Server.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.

Se ävenSee also

about_Execution_Policiesabout_Execution_Policies

about_Profilesabout_Profiles

Get-ExecutionPolicyGet-ExecutionPolicy

Set-ExecutionPolicySet-ExecutionPolicy

Set-AuthenticodeSignatureSet-AuthenticodeSignature

Introduktion till kod signeringIntroduction to Code Signing