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ıtlı 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 işlemleri açıklanmaktadır.

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, Kısıtlı yürütme ilkesi (varsayılan) 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 imzalanmamış 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 İnternet'ten 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.

  1. Betik dosyasını bilgisayarınıza kaydedin.
  2. Başlat'a tıklayın, Bilgisayarım'a tıklayın ve kaydedilen betik dosyasını bulun.
  3. Betik dosyasına sağ tıklayın ve ardından Özellikler'e tıklayın.
  4. 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çeneğini belirleyin. Yayımcıya güvenmiyorsanız "Hiçbir zaman çalıştır" veya "Çalıştırmayın" seçeneğini belirleyin. "Hiçbir zaman çalıştır" veya "Her zaman çalıştır" seçeneğini seçerseniz, PowerShell sizden bu yayımcıyı bir daha istemeyecektir.

Betik imzalama yöntemleri

Yazdığınız betikleri ve diğer kaynaklardan aldığınız betikleri imzalayabilirsiniz. Herhangi bir betiği imzalamadan önce, her komutu inceleyerek çalıştırılmasını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 olan otomatik olarak imzalanan bir sertifika oluşturur. Daha fazla bilgi için New-SelfSignedCertificate cmdlet'i için yardım konusuna bakın.

Betiklere 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 genel sertifika yetkilisi ücret karşılığında kimliğinizi doğrular ve size bir kod imzalama sertifikası verir. Sertifikanızı saygın bir sertifika yetkilisinden satın aldığınızda, betiğinizi Windows çalıştıran diğer bilgisayarlardaki kullanıcılarla paylaşabilirsiniz çünkü bu diğer bilgisayarlar sertifika yetkilisine güvenir.

  • 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 ve Windows 8 ve Windows Server 2012 eklenmiştir. 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.exekullanın. Bu araç, Microsoft .NET SDK'sında (sürüm 1.1 ve üzeri) ve Microsoft Windows SDK.

Söz dizimi ve aracın 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 bir 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. Hiçbir 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

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 daha sonra bu parolayı 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ı tanımlayan parmak izi aşağıdakine benzer bir ekranda gösterilir:

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

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

Betik 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
param([string] $file=$(throw "Please specify a filename."))
$cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
Set-AuthenticodeSignature $file $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 -codesigning)[0]
Set-AuthenticodeSignature add-signature.ps1 $cert

Betik imzalandıktan sonra yerel bilgisayarda çalıştırabilirsiniz. Ancak betik, PowerShell yürütme ilkesinin güvenilen 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ği 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 betikleri sizin adınıza 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 ve Internet Explorer'da bulunur.

Sertifikayı dışarı aktarmak için:

  1. Sertifika Yöneticisi'ni başlatın.
  2. PowerShell Yerel Sertifika Kökü tarafından verilen sertifikayı seçin.
  3. Sertifika Dışarı Aktarma Sihirbazı'nı başlatmak için Dışarı Aktar'a tıklayın.
  4. "Evet, özel anahtarı dışarı aktar" seçeneğini belirleyin ve ardından İleri'ye tıklayın.
  5. "Güçlü korumayı etkinleştir" seçeneğini belirleyin.
  6. Bir parola yazın ve onaylamak için yeniden yazın.
  7. .pfx dosya adı uzantısına sahip bir dosya adı yazın.
  8. Son'a tıklayın.

Sertifikayı yeniden içeri aktarmak için:

  1. Sertifika Yöneticisi'ni başlatın.
  2. Sertifika İçeri Aktarma Sihirbazı'nı başlatmak için İçeri Aktar'a tıklayın.
  3. Dışarı aktarma işlemi sırasında oluşturduğunuz .pfx dosyasının konumuna açın.
  4. Parola sayfasında "Güçlü özel anahtar korumasını etkinleştir" seçeneğini belirleyin ve dışarı aktarma işlemi sırasında atadığınız parolayı girin.
  5. Kişisel sertifika depoyu seçin.
  6. Son'a 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 boyunca kullanabilmesini sağlar.

Ayrıca bkz.