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.

  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ç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.exekullanı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:

  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'i seçin, özel anahtarı dışarı aktarın ve ardından İleri'ye tıklayın.
  5. Güçlü korumayı etkinleştir'i seçin.
  6. Bir parola yazın ve onaylamak için yeniden yazın.
  7. Dosya adı uzantısına .pfx sahip bir dosya adı yazın.
  8. Finish (Son) düğmesine 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 dosyanın konumuna .pfx açın.
  4. 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.
  5. Kişisel sertifika depoyu seçin.
  6. 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.