Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Korte beschrijving
Hierin wordt uitgelegd hoe u scripts ondertekent zodat ze voldoen aan het PowerShell-uitvoeringsbeleid.
Lange beschrijving
Deze informatie is alleen van toepassing op PowerShell die wordt uitgevoerd in Windows.
Het beleid voor beperkte uitvoering staat niet toe dat scripts worden uitgevoerd. Het uitvoeringsbeleid AllSigned en RemoteSigned voorkomt dat PowerShell scripts uitvoert die geen digitale handtekening hebben.
In dit onderwerp wordt uitgelegd hoe u geselecteerde scripts uitvoert die niet zijn ondertekend, zelfs als het uitvoeringsbeleid RemoteSigned is, en hoe u scripts ondertekent voor eigen gebruik.
Zie about_Execution_Policiesvoor meer informatie over PowerShell-uitvoeringsbeleid.
Toestaan dat ondertekende scripts worden uitgevoerd
Wanneer u PowerShell voor het eerst op een computer start, is het beleid voor beperkte uitvoering (de standaardinstelling) waarschijnlijk van kracht.
Het beleid Beperkt staat niet toe dat scripts worden uitgevoerd.
Als u het effectieve uitvoeringsbeleid op uw computer wilt vinden, typt u:
Get-ExecutionPolicy
Als u niet-ondertekende scripts wilt uitvoeren die u op uw lokale computer schrijft en ondertekende scripts van andere gebruikers, start u PowerShell met de optie Als administrator uitvoeren en gebruikt u vervolgens de volgende opdracht om het uitvoeringsbeleid op de computer te wijzigen in RemoteSigned:
Set-ExecutionPolicy RemoteSigned
Zie het Help-onderwerp voor de Set-ExecutionPolicy cmdlet voor meer informatie.
Niet-ondertekende scripts uitvoeren met behulp van het uitvoeringsbeleid RemoteSigned
Als uw PowerShell-uitvoeringsbeleid RemoteSigned is, voert PowerShell geen niet-ondertekende scripts uit die zijn gedownload van internet, inclusief niet-ondertekende scripts die u ontvangt via e-mail en chatprogramma's.
Als u een gedownload script probeert uit te voeren, wordt in PowerShell het volgende foutbericht weergegeven:
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.
Voordat u het script uitvoert, controleert u de code om er zeker van te zijn dat u het vertrouwt. Scripts hebben hetzelfde effect als elk uitvoerbaar programma.
Als u een niet-ondertekend script wilt uitvoeren, gebruikt u de Unblock-File cmdlet of gebruikt u de volgende procedure.
- Sla het scriptbestand op uw computer op.
- Klik op Start, klik op Deze computer en zoek het opgeslagen scriptbestand.
- Klik met de rechtermuisknop op het scriptbestand en klik vervolgens op Eigenschappen.
- Klik op Deblokkeren.
Als een script dat is gedownload van internet digitaal is ondertekend, maar u er nog niet voor hebt gekozen om de uitgever te vertrouwen, wordt het volgende bericht weergegeven:
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"):
Als u de uitgever vertrouwt, selecteert u 'Eén keer uitvoeren' of 'Altijd uitvoeren'. Als u de uitgever niet vertrouwt, selecteert u 'Nooit uitvoeren' of 'Niet uitvoeren'. Als u 'Nooit uitvoeren' of 'Altijd uitvoeren' selecteert, wordt u niet opnieuw gevraagd naar deze uitgever.
Methoden voor het ondertekenen van scripts
U kunt de scripts die u schrijft en de scripts die u uit andere bronnen haalt, ondertekenen. Voordat u een script ondertekent, moet u elke opdracht controleren om te controleren of deze veilig kan worden uitgevoerd.
Zie Code-Signing aanbevolen procedures voor het ondertekenen van codes.
Zie Set-AuthenticodeSignaturevoor meer informatie over het ondertekenen van een scriptbestand.
De New-SelfSignedCertificate cmdlet, geïntroduceerd in de PKI-module in PowerShell 3.0, maakt een zelfondertekend certificaat dat geschikt is voor testen. Zie het Help-onderwerp voor de New-SelfSignedCertificate cmdlet voor meer informatie.
Als u een digitale handtekening wilt toevoegen aan een script, moet u deze ondertekenen met een certificaat voor ondertekening van programmacode. Twee typen certificaten zijn geschikt voor het ondertekenen van een scriptbestand:
Certificaten die zijn gemaakt door een certificeringsinstantie: Voor een vergoeding verifieert een openbare certificeringsinstantie uw identiteit en krijgt u een certificaat voor ondertekening van programmacode. Wanneer u uw certificaat aanschaft bij een betrouwbare certificeringsinstantie, kunt u uw script delen met gebruikers op andere computers waarop Windows wordt uitgevoerd, omdat deze andere computers de certificeringsinstantie vertrouwen.
Certificaten die u maakt: u kunt een zelfondertekend certificaat maken waarvoor uw computer de instantie is waarmee het certificaat wordt gemaakt. Dit certificaat is gratis en stelt u in staat om scripts op uw computer te schrijven, te ondertekenen en uit te voeren. Een script dat is ondertekend door een zelfondertekend certificaat wordt echter niet uitgevoerd op andere computers.
Normaal gesproken gebruikt u een zelfondertekend certificaat alleen om scripts te ondertekenen die u voor eigen gebruik schrijft en om scripts te ondertekenen die u ontvangt van andere bronnen waarvan u hebt geverifieerd dat ze veilig zijn. Het is niet geschikt voor scripts die worden gedeeld, zelfs niet binnen een onderneming.
Als u een zelfondertekend certificaat maakt, moet u de beveiliging van sterke persoonlijke sleutels voor uw certificaat inschakelen. Hiermee voorkomt u dat schadelijke programma's scripts namens u ondertekenen. De instructies worden aan het einde van dit onderwerp opgenomen.
Een zelfondertekend certificaat maken
Als u een zelfondertekend certificaat wilt maken, gebruikt u de New-SelfSignedCertificate cmdlet in de PKI-module. Deze module is geïntroduceerd in PowerShell 3.0 en is opgenomen in Windows 8 en Windows Server 2012. Zie New-SelfSignedCertificate voor meer informatie.
$params = @{
Subject = 'CN=PowerShell Code Signing Cert'
Type = 'CodeSigning'
CertStoreLocation = 'Cert:\CurrentUser\My'
HashAlgorithm = 'sha256'
}
$cert = New-SelfSignedCertificate @params
Makecert.exe gebruiken
Als u een zelfondertekend certificaat wilt maken in eerdere versies van Windows, gebruikt u het hulpprogramma voor het maken van certificaten MakeCert.exe. Dit hulpprogramma is opgenomen in de Microsoft .NET SDK (versie 1.1 en hoger) en in de Microsoft Windows SDK.
Zie MakeCert.exevoor meer informatie over de syntaxis en de parameterbeschrijvingen van het hulpprogramma .
Als u het hulpprogramma MakeCert.exe wilt gebruiken om een certificaat te maken, voert u de volgende opdrachten uit in een SDK-opdrachtpromptvenster.
Opmerking
Met de eerste opdracht maakt u een lokale certificeringsinstantie voor uw computer. Met de tweede opdracht wordt een persoonlijk certificaat van de certificeringsinstantie gegenereerd. U kunt de opdrachten kopiëren of typen zoals ze worden weergegeven. Er zijn geen vervangingen nodig, hoewel u de certificaatnaam kunt wijzigen.
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
De MakeCert.exe tool zal u vragen om een wachtwoord voor een privésleutel. Het wachtwoord zorgt ervoor dat niemand het certificaat kan gebruiken of openen zonder uw toestemming. Maak en voer een wachtwoord in dat u kunt onthouden. Dit wachtwoord gebruik je later om het certificaat op te halen.
Als u wilt controleren of het certificaat correct is gegenereerd, gebruikt u de volgende opdracht om het certificaat op te halen in het certificaatarchief op de computer. U vindt geen certificaatbestand in de map van het bestandssysteem.
Typ bij de PowerShell-prompt:
Get-ChildItem cert:\CurrentUser\my -codesigning
Met deze opdracht wordt de PowerShell-certificaatprovider gebruikt om informatie over het certificaat weer te geven.
Als het certificaat is gemaakt, wordt in de uitvoer de vingerafdruk weergegeven waarmee het certificaat wordt geïdentificeerd in een weergave die er ongeveer als volgt uitziet:
Directory: Microsoft.PowerShell.Security\Certificate::CurrentUser\My
Thumbprint Subject
---------- -------
4D4917CB140714BA5B81B96E0B18AAF2C4564FDF CN=PowerShell User ]
Een script ondertekenen
Nadat u een zelfondertekend certificaat hebt gemaakt, kunt u scripts ondertekenen. Als u het AllSigned uitvoeringsbeleid gebruikt, geeft het ondertekenen van een script u toestemming om het script op uw computer uit te voeren.
Het volgende voorbeeldscript, Add-Signature.ps1, ondertekent een script. Als u echter het AllSigned uitvoeringsbeleid gebruikt, moet u het Add-Signature.ps1 script ondertekenen voordat u het uitvoert.
Belangrijk
Het script moet worden opgeslagen met behulp van ASCII- of UTF8NoBOM-codering. U kunt een scriptbestand ondertekenen dat gebruikmaakt van een andere codering, maar het script kan niet worden uitgevoerd of de module met het script kan niet worden geïmporteerd. Het script mislukt ook als het bestand Unicode-tekens (UTF8) bevat.
Als u dit script wilt gebruiken, kopieert u de volgende tekst naar een tekstbestand en noemt u deze 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
Als u het Add-Signature.ps1 scriptbestand wilt ondertekenen, typt u de volgende opdrachten bij de PowerShell-opdrachtprompt:
$cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
Set-AuthenticodeSignature add-signature.ps1 $cert
Nadat het script is ondertekend, kunt u het op de lokale computer uitvoeren. Het script wordt echter niet uitgevoerd op computers waarop het PowerShell-uitvoeringsbeleid een digitale handtekening van een vertrouwde autoriteit vereist. Als u het probeert, wordt in PowerShell het volgende foutbericht weergegeven:
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 <<<<
Als dit bericht in PowerShell wordt weergegeven wanneer u een script uitvoert dat u niet hebt geschreven, behandelt u het bestand op dezelfde manier als elk niet-ondertekend script. Controleer de code om te bepalen of u het script kunt vertrouwen.
Krachtige beveiliging voor uw persoonlijke sleutel inschakelen
Als u een persoonlijke sleutel en certificaat op uw computer hebt, kunnen schadelijke programma's mogelijk scripts namens u ondertekenen, waardoor PowerShell deze kan uitvoeren.
Als u geautomatiseerde ondertekening namens u wilt voorkomen, gebruikt u Certificate Manager Certmgr.exe om uw handtekeningsleutel en certificaat te exporteren naar een .pfx-bestand. Certificaatbeheer is opgenomen in de Microsoft .NET SDK, de Microsoft Windows SDK en in Internet Explorer.
Het certificaat exporteren:
- Start Certificaatbeheer.
- Selecteer het certificaat dat is afgegeven door PowerShell Lokale Certificaat Root.
- Klik op Exporteren om de wizard Certificaat exporteren te starten.
- Selecteer 'Ja, exporteer de privésleutel' en klik vervolgens op Volgende.
- Selecteer 'Sterke beveiliging inschakelen'.
- Typ een wachtwoord en typ het opnieuw om te bevestigen.
- Typ een bestandsnaam met de bestandsnaamextensie .pfx.
- Klik op Voltooien.
Het certificaat opnieuw importeren:
- Start Certificaatbeheer.
- Klik op Importeren om de wizard Certificaat importeren te starten.
- Open de locatie van het .pfx-bestand dat u tijdens het exportproces hebt gemaakt.
- Selecteer op de pagina Wachtwoord de optie 'Beveiliging met sterke persoonlijke sleutel inschakelen' en voer vervolgens het wachtwoord in dat u tijdens het exportproces hebt toegewezen.
- Selecteer het archief met persoonlijke certificaten.
- Klik op Voltooien.
Voorkomen dat de handtekening verloopt
De digitale handtekening in een script is geldig totdat het handtekeningcertificaat verloopt of zolang een tijdstempelserver kan controleren of het script is ondertekend terwijl het handtekeningcertificaat geldig was.
Omdat de meeste handtekeningcertificaten slechts één jaar geldig zijn, zorgt het gebruik van een tijdstempelserver ervoor dat gebruikers uw script vele jaren kunnen gebruiken.