Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Kısa açıklama
Betiklerin PowerShell yürütme ilkeleriyle uyumlu olması için nasıl imzalanması gerektiğini açıklar.
Uzun açıklama
Bu bilgiler yalnızca Windows üzerinde çalışan PowerShell için geçerlidir.
Kısıtlanmış yürütme ilkesi hiçbir betiğin çalışmasına izin vermez. AllSigned ve RemoteSigned yürütme ilkeleri PowerShell'in dijital imzası olmayan betikleri çalıştırmasını engeller.
Bu konu, çalıştırma ilkesi RemoteSignedolsa bile imzalanmamış seçili betikleri nasıl çalıştıracağınızı ve betikleri kendi kullanımınız için nasıl imzalayacağınızı açıklar.
PowerShell, aşağıdaki tür türlerinin Authenticode imzasını denetler:
-
.ps1betik dosyaları -
.psm1modül dosyaları -
.psd1modül manifestosu ve veri dosyaları - XML dosyalarını
.ps1xmlyazın ve biçimlendirin -
.cdxmlCDXML betik dosyaları -
.xamlXAML betik dosyaları
PowerShell yürütme ilkeleri hakkında daha fazla bilgi için bkz. about_Execution_Policies.
İmzalı betiklerin yürütülmesine izin ver
PowerShell'i bir bilgisayarda ilk kez başlattığınızda, varsayılan olan Kısıtlı yürütme ilkesi büyük olasılıkla etkin olacaktır.
Kısıtlanmış ilkesi tüm betiklerin çalışmasını engeller.
Bilgisayarınızda etkin yürütme ilkesini bulmak için şunu yazın:
Get-ExecutionPolicy
RemoteSigned ilkesi, yerel olarak oluşturduğunuz imzalı veya imzasız betikleri çalıştırmanıza olanak tanır. Bu ilkeyi yapılandırmak için PowerShell'i Yönetici olarak çalıştır seçeneğiyle başlatın ve yürütme ilkesini değiştirmek için aşağıdaki komutu kullanın.
Set-ExecutionPolicy RemoteSigned
Daha fazla bilgi için Set-ExecutionPolicy cmdlet'i için yardım konusuna bakın.
İmzalı bir betiği çalıştırmak için betiğin güvenilir bir yayımcıdan dijital imzaya sahip olması gerekir. Kod imzalama sertifikasının, bilgisayarda güvenilen bir sertifika otoritesi tarafından verilmesi gerekir. Otomatik olarak imzalanan sertifikalar, bilgisayardaki Güvenilen Kök Sertifikalar deposuna yüklenmelidir.
RemoteSigned ilkesini kullanarak imzalanmamış betikleri çalıştırma
PowerShell yürütme ilkeniz RemoteSigned ise, PowerShell e-posta ve anlık ileti programları aracılığıyla aldığınız imzasız betikler de dahil olmak üzere internetten indirilen imzasız betikleri çalıştırmaz.
İndirilen bir betiği çalıştırmaya çalışırsanız PowerShell aşağıdaki hata iletisini görüntüler:
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.
Betiği çalıştırmadan önce, güvendiğinizden emin olmak için kodu gözden geçirin. Betikler herhangi bir yürütülebilir programla aynı etkiye sahiptir.
İmzasız bir betik çalıştırmak için Unblock-File cmdlet'ini kullanın veya aşağıdaki yordamı kullanın.
- Betik dosyasını bilgisayarınıza kaydedin.
- Başlat tıklayın, Bilgisayarım tıklayın ve kaydedilen betik dosyasını bulun.
- Betik dosyasına sağ tıklayın ve ardından Özellikleröğesine tıklayın.
- Engellemesini Kaldır'ıtıklayın.
İnternet'ten indirdiğiniz bir betik dijital olarak imzalandıysa ancak henüz yayımcısına güvenmeyi seçmediyseniz PowerShell aşağıdaki iletiyi görüntüler:
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"):
Yayımcıya güveniyorsanız, bir kez çalıştır veya her zaman çalıştırseçeneklerinden birini seçin. Yayımcıya güvenmiyorsanız Hiçbir zaman veya çalıştırma'yı seçin. Hiçbir zaman çalıştırma veya Her zaman çalıştırseçeneklerini seçerseniz, PowerShell bu yayıncı için sizden bir daha onay istemeyecektir.
Betik imzalama yöntemleri
Yazdığınız betikleri ve diğer kaynaklardan edindiğiniz betikleri imzalayabilirsiniz. Herhangi bir betiği imzalamadan önce, her komutu inceleyerek çalıştırmanın güvenli olduğunu doğrulayın.
Betik dosyasını imzalama hakkında daha fazla bilgi için bkz. Set-AuthenticodeSignature.
PowerShell 3.0'daki PKI modülünde sunulan New-SelfSignedCertificate cmdlet'i, test için uygun otomatik olarak imzalanan bir sertifika oluşturur. Daha fazla bilgi için New-SelfSignedCertificate cmdlet'i için yardım konusuna bakın.
Bir betike dijital imza eklemek için bunu bir kod imzalama sertifikasıyla imzalamanız gerekir. Betik dosyasını imzalamak için iki tür sertifika uygundur:
Sertifika yetkilisi tarafından oluşturulan sertifikalar: Bir ücret karşılığında, genel sertifika yetkilisi kimliğinizi doğrular ve size bir kod imzalama sertifikası verir. Sertifikanızı saygın bir sertifika yetkilisinden satın aldığınızda, bu diğer bilgisayarlar sertifika yetkilisine güvendiği için betiğinizi Windows çalıştıran diğer bilgisayarlardaki kullanıcılarla paylaşabilirsiniz.
Oluşturduğunuz sertifikalar: Bilgisayarınızın sertifikayı oluşturan yetkili olduğu otomatik olarak imzalanan bir sertifika oluşturabilirsiniz. Bu sertifika ücretsizdir ve bilgisayarınızda betik yazmanızı, imzalamanızı ve çalıştırmanızı sağlar. Ancak, kendi kendine imzalanmış bir sertifikayla imzalanan bir betik diğer bilgisayarlarda çalışmaz.
Otomatik olarak imzalanan sertifika yalnızca test amacıyla betikleri imzalamak için kullanılmalıdır. Otomatik olarak imzalanan sertifikalar, paylaşmak istediğiniz betikler için uygun değildir.
Otomatik olarak imzalanan bir sertifika oluşturursanız, sertifikanızda güçlü özel anahtar korumasını etkinleştirdiğinizden emin olun. Bu, kötü amaçlı programların sizin adınıza betik imzalamasını engeller. Yönergeler bu konunun sonunda yer alır.
Kendinden imzalı sertifika oluşturma
Otomatik olarak imzalanan bir sertifika oluşturmak için PKI modülündeki New-SelfSignedCertificate cmdlet'ini kullanın. Bu modül PowerShell 3.0'da kullanıma sunulmuştur. Daha fazla bilgi için New-SelfSignedCertificate cmdlet'i için yardım konusuna bakın.
$params = @{
Subject = 'CN=PowerShell Code Signing Cert'
Type = 'CodeSigning'
CertStoreLocation = 'Cert:\CurrentUser\My'
HashAlgorithm = 'sha256'
}
$cert = New-SelfSignedCertificate @params
Makecert.exe kullanma
Windows'un önceki sürümlerinde otomatik olarak imzalanan bir sertifika oluşturmak için MakeCert.exeSertifika Oluşturma aracını kullanın. Bu araç, Microsoft .NET SDK'sında (sürüm 1.1 ve üzeri) ve Microsoft Windows SDK'sında bulunur.
MakeCert.exe aracının söz dizimi ve parametre açıklamaları hakkında daha fazla bilgi için bkz. Sertifika Oluşturma Aracı (MakeCert.exe).
Sertifika oluşturmak için MakeCert.exe aracını kullanmak için sdk Komut İstemi penceresinde aşağıdaki komutları çalıştırın.
Not
İlk komut, bilgisayarınız için yerel bir sertifika yetkilisi oluşturur. İkinci komut, sertifika yetkilisinden kişisel bir sertifika oluşturur. Komutları tam olarak göründükleri gibi kopyalayabilir veya yazabilirsiniz. Değiştirme gerekli değildir, ancak sertifika adını değiştirebilirsiniz.
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
MakeCert.exe aracı sizden özel anahtar parolası ister. Parola, izniniz olmadan kimsenin sertifikayı kullanmamasını veya sertifikaya erişemesini sağlar.
Anımsayabileceğiniz bir parola oluşturun ve girin. Sertifikayı almak için bu parolayı daha sonra kullanacaksınız.
Sertifikanın doğru oluşturulduğunu doğrulamak için aşağıdaki komutu kullanarak sertifikayı bilgisayardaki sertifika deposunda alın. Dosya sistemi dizininde bir sertifika dosyası bulamazsınız.
PowerShell istemine şunu yazın:
Get-ChildItem Cert:\CurrentUser\my -CodeSigning
Bu komut, sertifika hakkındaki bilgileri görüntülemek için PowerShell Sertifika sağlayıcısını kullanır.
Sertifika oluşturulduysa, çıkışta sertifikayı aşağıdakine benzer bir görüntüde tanımlayan parmak izi gösterilir:
Directory: Microsoft.PowerShell.Security\Certificate::CurrentUser\My
Thumbprint Subject
---------- -------
4D4917CB140714BA5B81B96E0B18AAF2C4564FDF CN=PowerShell User
Betiği imzalama
Kendi imzaladığınız bir sertifika oluşturduktan sonra betikleri imzalayabilirsiniz. AllSigned yürütme ilkesini kullanırsanız, bir betiği imzalamak, onun bilgisayarınızda çalıştırılabilmesini sağlar.
Aşağıdaki örnek betik Add-Signature.ps1bir betik imzalar. Ancak, AllSigned yürütme ilkesini kullanıyorsanız, çalıştırmadan önce Add-Signature.ps1 betiğini imzalamanız gerekir.
Önemli
PowerShell 7.2'den önce betiğin ASCII veya UTF8NoBOM kodlaması kullanılarak kaydedilmesi gerekir. PowerShell 7.2 ve üzeri, herhangi bir kodlama biçimi için imzalı betikleri destekler.
Bu betiği kullanmak için aşağıdaki metni bir metin dosyasına kopyalayın ve Add-Signature.ps1olarak adlandırın.
## SIGNS A FILE
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[string] $File
)
$cert = Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert |
Select-Object -First 1
Set-AuthenticodeSignature -FilePath $File -Certificate $cert
Add-Signature.ps1 betik dosyasını imzalamak için PowerShell komut istemine aşağıdaki komutları yazın:
$cert = Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert |
Select-Object -First 1
Set-AuthenticodeSignature Add-Signature.ps1 $cert
Set-AuthenticodeSignature cmdlet'i, imzayı betik dosyasının sonuna açıklama bloğu olarak ekler. Açıklama bloğu başlar ve # SIG #ile biter.
Betiği imzaladıktan sonra yerel bilgisayarda çalıştırabilirsiniz. Ancak betik, PowerShell yürütme ilkesinin güvenilir bir yetkiliden dijital imza gerektirdiği bilgisayarlarda çalışmaz. Denerseniz PowerShell aşağıdaki hata iletisini görüntüler:
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 <<<<
PowerShell yazmadığınız bir betiği çalıştırdığınızda bu iletiyi görüntülerse, dosyayı imzalanmamış betiklere davrandığınız gibi değerlendirin. Betiğe güvenebilir miyiz diye kodu gözden geçirin.
Özel anahtarınız için güçlü korumayı etkinleştirme
Bilgisayarınızda özel bir anahtar ve sertifika varsa, kötü amaçlı programlar sizin adınıza betikleri imzalayabilir ve bu da PowerShell'e bunları çalıştırma yetkisi verebilir.
Sizin adınıza otomatik imzalamayı önlemek için Sertifika Yöneticisi Certmgr.exe kullanarak imzalama anahtarınızı ve sertifikanızı bir .pfx dosyasına aktarın.
Sertifika Yöneticisi, Microsoft .NET SDK'sı, Microsoft Windows SDK'sı ve Internet Explorer'da bulunur.
Sertifikayı dışarı aktarmak için:
- Sertifika Yöneticisi'ni başlatın.
- PowerShell Yerel Sertifika Kökü tarafından verilen sertifikayı seçin.
- Sertifika Dışarı Aktarma Sihirbazı'nı başlatmak için Dışarı Aktar'a tıklayın.
- Evet, özel anahtarı dışa aktarseçeneğini seçin ve ardından İleriseçeneğine tıklayın.
- güçlü korumayı etkinleştirseçin.
- Bir parola yazın ve onaylamak için yeniden yazın.
-
.pfxdosya adı uzantısına sahip bir dosya adı yazın. - Son'ne tıklayın.
Sertifikayı yeniden içeri aktarmak için:
- Sertifika Yöneticisi'ni başlatın.
- İçeri Aktar'a tıklayarak Sertifika İçeri Aktarma Sihirbazı'nı başlatın.
- Dışarı aktarma işlemi sırasında oluşturduğunuz
.pfxdosyasının konumuna açın. - Parola sayfasında, güçlü özel anahtar korumasını etkinleştir'i seçin ve dışarı aktarma işlemi sırasında atadığınız parolayı girin.
- Kişisel sertifika deposunu seçin.
- Son'ne tıklayın.
İmzanın süresinin dolmasını engelleme
Bir betikteki dijital imza, imzalama sertifikasının süresi dolana kadar veya bir zaman damgası sunucusu imzalama sertifikası geçerliyken betiğin imzalandığını doğrulayabildiği sürece geçerlidir.
İmzalama sertifikalarının çoğu yalnızca bir yıl geçerli olduğundan, zaman damgası sunucusu kullanmak kullanıcıların betiğinizi uzun yıllar kullanabilmesini sağlar.
Ayrıca bakınız
- Yürütme_Politikaları_Hakkında
- profiller_hakkında
- Set-AuthenticodeSignature
- get-executionpolicy
- Set-ExecutionPolicy
- Kod İmzalamaya Giriş
PowerShell