about_Signing

Kısa açıklama

Betikleri PowerShell yürütme ilkeleriyle uyumlu olacak şekilde nasıl imzalayabileceğinizi açıklar.

Uzun açıklama

Kısıtlı yürütme ilkesi hiçbir betiğin çalıştırılmasına izin vermiyor. AllSigned ve RemoteSigned Execution Policies, PowerShell 'in dijital imzaya sahip olmayan betikleri çalıştırmasını engeller.

Bu konu, yürütme ilkesi RemoteSigned olsa da, komut dosyalarının kendi kullanımı için nasıl imzalanacağı gibi imzalı olmayan seçili betiklerin nasıl çalıştırılacağını açıklar.

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, sınırlı yürütme ilkesinin (varsayılan) etkin olma olasılığı yüksektir.

Yasak ilke hiçbir betiğin çalıştırılmasına izin vermiyor.

Bilgisayarınızda etkili Yürütme ilkesini bulmak için şunu yazın:

Get-ExecutionPolicy

Yerel bilgisayarınızda ve imzalı betiklerinizde bulunan İmzasız komut dosyalarını diğer kullanıcılardan çalıştırmak için PowerShell 'i yönetici olarak çalıştır seçeneğiyle başlatın ve ardından 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 için yardım konusuna bakın Set-ExecutionPolicy .

RemoteSigned Yürütme ilkesini kullanarak imzasız betikleri çalıştırma

PowerShell yürütme ilkeniz RemoteSigned ise, PowerShell, e-posta ve anlık mesajlaşma programları aracılığıyla aldığınız imzasız betikler dahil olmak üzere internet 'ten indirilen imzasız betikleri çalıştırmaz.

İndirilen bir betiği çalıştırmayı denerseniz, PowerShell şu 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, tüm yürütülebilir programlar ile aynı etkiye sahiptir.

İmzasız bir betiği çalıştırmak için Unblock-File cmdlet 'ini kullanın ya da 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 imzalanmışsa, ancak henüz yayımcısına güvenmeyi seçtiyseniz, 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 şekilde Çalıştır" veya "Çalıştırılmadı" seçeneğini belirleyin. "Hiçbir zaman Çalıştır" veya "her zaman Çalıştır" seçeneğini belirlerseniz, PowerShell Bu Yayımcı için sizi bir daha istemez.

Komut dosyalarını imzalama yöntemleri

Yazdığınız betikleri ve diğer kaynaklardan elde ettiğiniz betikleri imzalayabilirsiniz. Herhangi bir betiği imzalayabilmeniz için, her bir komutu inceleyerek çalıştırmanın güvenli olduğunu doğrulayın.

Kod imzalama hakkında en iyi uygulamalar için bkz. kod Imzalama En Iyi yöntemleri.

Bir betik dosyasını imzalama hakkında daha fazla bilgi için bkz. set-AuthenticodeSignature.

New-SelfSignedCertificatePowerShell 3,0 ' DEKI PKI modülünde tanıtılan cmdlet, test Için uygun olan kendinden imzalı bir sertifika oluşturur. Daha fazla bilgi için New-SelfSignedCertificate cmdlet 'inin yardım konusuna bakın.

Bir betiğe dijital imza eklemek için, kodu bir kod imzalama sertifikasıyla imzalamanız gerekir. İki tür sertifika, bir betik dosyasını imzalamak için uygundur:

  • Bir sertifika yetkilisi tarafından oluşturulan sertifikalar: bir ücret karşılığında, bir genel sertifika yetkilisi kimliğinizi doğrular ve size bir kod imzalama sertifikası verir. sertifikayı saygın bir sertifika yetkilisinden satın aldığınızda, diğer bilgisayarlar sertifika yetkilisine güvendiğinden, komut dosyanızı 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 betikleri yazmanızı, imzalamanıza ve çalıştırmanıza olanak sağlar. Ancak, otomatik olarak imzalanan bir sertifika tarafından imzalanmış bir betik diğer bilgisayarlarda çalışmaz.

Genellikle kendinden imzalı bir sertifikayı yalnızca kendi kullanım için yazdığınız betikleri imzalamak ve güvenli olduğunu doğrulamış olduğunuz diğer kaynaklardan aldığınız betikleri imzalamak için kullanırsınız. Bir kuruluş içinde bile paylaşılacak betikler için uygun değildir.

Kendinden imzalı bir sertifika oluşturursanız, sertifikanıza güçlü özel anahtar korumasını etkinleştirdiğinizden emin olun. Bu, kötü amaçlı programların sizin adınıza betikleri imzalamasını önler. Yönergeler bu konunun sonunda bulunur.

Otomatik olarak imzalanan sertifika oluşturma

Kendinden imzalı bir sertifika oluşturmak için PKI modülünde New-SelfSignedCertificate cmdlet 'ini kullanın. bu modül, PowerShell 3,0 ' de kullanıma sunulmuştur ve Windows 8 ve Windows Server 2012 dahil edilmiştir. Daha fazla bilgi için cmdlet için yardım konusuna bakın New-SelfSignedCertificate .

$params = @{
    Subject = 'CN=PowerShell Code Signing Cert'
    Type = 'CodeSigning'
    CertStoreLocation = 'Cert:\CurrentUser\My'
    HashAlgorithm = 'sha256'
}
$cert = New-SelfSignedCertificate @params

Makecert.exe kullanma

Windows önceki sürümlerinde otomatik olarak imzalanan bir sertifika oluşturmak için, sertifika oluşturma aracını kullanın MakeCert.exe . bu araç Microsoft .NET SDK (1,1 ve üzeri sürümler) ve Microsoft Windows SDK dahildir.

Aracın sözdizimi ve parametre açıklamaları hakkında daha fazla bilgi için MakeCert.exe bkz. sertifika oluşturma aracı (MakeCert.exe).

MakeCert.exeBir sertifika oluşturmak için aracı kullanmak üzere, BIR SDK komut istemi penceresinde aşağıdaki komutları çalıştırın.

Not

İlk komut bilgisayarınız için bir yerel sertifika yetkilisi oluşturur. İkinci komut, sertifika yetkilisinden bir kişisel sertifika oluşturur. Komutları aynen göründükleri gibi kopyalayabilir veya yazabilirsiniz. Değişiklik 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.exeAraç sizden özel anahtar parolası ister. Parola, hiç kimse izin vermeden sertifikayı kullanamaz veya hiçbir şekilde erişemez. Hatırlayabileceğiniz bir parola oluşturun ve girin. Bu parolayı daha sonra sertifikayı almak için kullanacaksınız.

Sertifikanın doğru şekilde oluşturulduğunu doğrulamak için, sertifikayı bilgisayardaki sertifika deposunda almak üzere aşağıdaki komutu kullanın. Dosya sistemi dizininde bir sertifika dosyası bulamacaksınız.

PowerShell isteminde şunu yazın:

Get-ChildItem cert:\CurrentUser\my -codesigning

Bu komut, sertifikayla ilgili bilgileri görüntülemek için PowerShell sertifika sağlayıcısını kullanır.

Sertifika oluşturulduysa, çıkış, sertifikayı aşağıdakine benzer bir ekranda tanımlayan parmak izini gösterir:

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

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

Betiği imzala

Otomatik olarak imzalanan bir sertifika oluşturduktan sonra, betikleri imzalayabilirsiniz. AllSigned Yürütme ilkesini kullanırsanız, bir betiği imzalamak, betiği bilgisayarınızda çalıştırmanıza izin verir.

Aşağıdaki örnek betik, Add-Signature.ps1 bir betiği imzalar. Ancak, AllSigned Yürütme ilkesini kullanıyorsanız, Add-Signature.ps1 çalıştırmadan önce betiği imzalamanız gerekir.

Önemli

Betiğin ASCII veya UTF8NoBOM kodlaması kullanılarak kaydedilmesi gerekir. Farklı bir kodlama kullanan bir komut dosyasını imzalayabilirsiniz. Ancak betik çalışamazsa veya betiği içeren modül içeri aktarılamıyor.

Bu betiği kullanmak için aşağıdaki metni bir metin dosyasına kopyalayın ve 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

Add-Signature.ps1Betik dosyasını imzalamak 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

Betiği imzalandıktan sonra yerel bilgisayarda çalıştırabilirsiniz. Ancak, komut dosyası, PowerShell yürütme ilkesinin güvenilen bir yetkiliyle dijital imza gerektirdiği bilgisayarlarda çalışmaz. Denerseniz, PowerShell şu 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 <<<<

Yazmayan bir betiği çalıştırdığınızda PowerShell bu iletiyi görüntülerse, imzasız herhangi bir betiği kabul ettiğiniz için dosyayı değerlendirin. Betiğe güvenip güvenemeyeceğinizi öğrenmek için kodu gözden geçirin.

Sertifikanız için güçlü özel anahtar korumasını etkinleştirin

Bilgisayarınızda özel bir sertifikanız varsa, kötü amaçlı programlar sizin adınıza komut dosyalarını imzalayabiliyor, bu da PowerShell 'i çalıştırmak üzere yetkilendirir.

Sizin adınıza otomatik oturum açmayı engellemek için, Certmgr.exe imzalama sertifikanızı bir dosyaya aktarmak üzere Sertifika Yöneticisi 'ni kullanın .pfx . sertifika yöneticisi, Microsoft .NET SDK, Microsoft Windows SDK ve ınternet Explorer 'a dahildir.

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 Ileri ' ye tıklayın.
  5. "Güçlü korumayı etkinleştir" i seçin.
  6. Parolayı 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 Içeri aktarma Sihirbazı 'Nı başlatmak için Iç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" i seçin ve ardından dışarı aktarma işlemi sırasında atadığınız parolayı girin.
  5. Kişisel sertifika deposunu seçin.
  6. Son'a tıklayın.

İmzanın süresinin dolmasını önleme

Bir betikteki dijital imza, imzalama sertifikasının süresi dolana veya imza sertifikası geçerli olduğu sürece bir zaman damgası sunucusu betiğin imzalandığını doğrulayaıncaya kadar geçerlidir.

Çoğu imza sertifikası yalnızca bir yıl boyunca geçerli olduğundan, zaman damgası sunucusu kullanmak kullanıcıların betiğinizi birçok yıl boyunca kullanmasını sağlar.

Ayrıca bkz.

about_Execution_Policies

about_Profiles

Get-ExecutionPolicy

Set-ExecutionPolicy

Set-AuthenticodeSignature

Kod Imzalamaya giriş