about_Signing
Kısa açıklama
Betiklerin PowerShell yürütme ilkeleriyle uyumlu olması için nasıl imzalandığını 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 başlığı altında, yürütme ilkesi RemoteSigned olsa bile, imzalanmamış seçili betikleri çalıştırma ve betikleri kendi kullanımınız için imzalama açıklanmaktadır.
PowerShell, aşağıdaki tür türlerinin Authenticode imzasını denetler:
.ps1
betik dosyaları.psm1
modül dosyaları.psd1
modül bildirimi ve veri dosyaları.ps1xml
XML dosyalarını yazma ve biçimlendirme.cdxml
CDXML betik dosyaları.xaml
XAML betik dosyaları
PowerShell yürütme ilkeleri hakkında daha fazla bilgi için bkz . about_Execution_Policies.
İmzalı betiklerin çalışmasına izin vermek için
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ıtlı ilke, hiçbir betiğin çalışmasına izin vermez.
Bilgisayarınızda etkin yürütme ilkesini bulmak için şunu yazın:
Get-ExecutionPolicy
Yerel bilgisayarınızda yazdığınız imzasız betikleri ve diğer kullanıcıların imzalı betiklerini çalıştırmak için, PowerShell'i Yönetici Olarak Çalıştır seçeneğiyle başlatın ve bilgisayardaki yürütme ilkesini RemoteSigned olarak değiştirmek için aşağıdaki komutu kullanın:
Set-ExecutionPolicy RemoteSigned
Daha fazla bilgi için cmdlet'in yardım konusuna Set-ExecutionPolicy
bakın.
RemoteSigned yürütme 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 betiği çalıştırmak için cmdlet'ini Unblock-File
kullanın veya aşağıdaki yordamı kullanın.
- Betik dosyasını bilgisayarınıza kaydedin.
- Başlat'a tıklayın, Bilgisayarım'a tıklayın ve kaydedilen betik dosyasını bulun.
- Betik dosyasına sağ tıklayın ve ardından Özellikler'e tıklayın.
- Engellemeyi Kaldır'a tıklayın.
İnternet'ten indirilen 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ır'ı seçin. Yayımcıya güvenmiyorsanız Hiçbir zaman çalıştır veya Çalıştırmayın'ı seçin. Hiçbir zaman çalıştır veya Her zaman çalıştır'ı seçerseniz PowerShell bu yayımcı için sizden bir daha 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.
Kod imzalama hakkında en iyi yöntemler için bkz . Kod İmzalama En İyi Yöntemleri.
Betik dosyasını imzalama hakkında daha fazla bilgi için bkz . Set-AuthenticodeSignature.
New-SelfSignedCertificate
PowerShell 3.0'daki PKI modülünde tanıtılan cmdlet, test için uygun otomatik olarak imzalanan bir sertifika oluşturur. Daha fazla bilgi için cmdlet'in yardım konusuna New-SelfSignedCertificate
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, otomatik olarak imzalanan bir sertifika tarafından imzalanan bir betik diğer bilgisayarlarda çalışmaz.
Genellikle, otomatik olarak imzalanan bir sertifikayı yalnızca kendi kullanımınız için yazdığınız betikleri imzalamak ve güvenli olduğunu doğruladığınız diğer kaynaklardan aldığınız betikleri imzalamak için kullanırsınız. Kuruluş içinde bile paylaşılacak 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.
Otomatik olarak imzalanan 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 cmdlet'in yardım konusuna New-SelfSignedCertificate
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 Sertifika Oluşturma aracını MakeCert.exe
kullanın. Bu araç, Microsoft .NET SDK'sında (sürüm 1.1 ve üzeri) ve Microsoft Windows SDK'sında bulunur.
Aracın söz dizimi ve parametre açıklamaları MakeCert.exe
hakkında daha fazla bilgi için bkz . Sertifika Oluşturma Aracı (MakeCert.exe).
Sertifika oluşturmak üzere aracı kullanmak MakeCert.exe
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. Sertifika adını değiştirebilmenize rağmen değiştirme gerekmez.
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
Araç sizden MakeCert.exe
ö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, çıktı aşağıdakine benzer bir görüntüde sertifikayı tanımlayan parmak izini gösterir:
Directory: Microsoft.PowerShell.Security\Certificate::CurrentUser\My
Thumbprint Subject
---------- -------
4D4917CB140714BA5B81B96E0B18AAF2C4564FDF CN=PowerShell User ]
Betiği imzalama
Otomatik olarak imzalanan bir sertifika oluşturduktan sonra betikleri imzalayabilirsiniz. AllSigned yürütme ilkesini kullanırsanız, betiği imzalamak betiği bilgisayarınızda çalıştırmanıza izin verir.
Aşağıdaki örnek betik olan Add-Signature.ps1
, bir betiği imzalar. Ancak, AllSigned yürütme ilkesini kullanıyorsanız, çalıştırmadan önce betiği imzalamanız Add-Signature.ps1
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 olarak adlandırın Add-Signature.ps1
.
## 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
Betik dosyasını imzalamak Add-Signature.ps1
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
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. Betike güvenip güvenemeyeceğinizi belirlemek için 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'ni Certmgr.exe
kullanarak imzalama anahtarınızı ve sertifikanızı bir .pfx
dosyaya 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'i seçin, özel anahtarı dışarı aktarın ve ardından İleri'ye tıklayın.
- Güçlü korumayı etkinleştir'i seçin.
- Bir parola yazın ve onaylamak için yeniden yazın.
- Dosya adı uzantısına
.pfx
sahip bir dosya adı yazın. - Finish (Son) düğmesine tıklayın.
Sertifikayı yeniden içeri aktarmak için:
- Sertifika Yöneticisi'ni başlatın.
- Sertifika İçeri Aktarma Sihirbazı'nı başlatmak için İçeri Aktar'a tıklayın.
- Dışarı aktarma işlemi sırasında oluşturduğunuz dosyanın konumuna
.pfx
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 depoyu seçin.
- Finish (Son) düğmesine 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 bkz.
PowerShell