PowerShell ile Kod İmzalama Nasıl Yapılır?
PowerShell scriptlerinin imzalanması, kurumsal ortamlarda güvenlik politikalarının temel bir parçasıdır. Windows Execution Policy, imzalanmamış scriptlerin çalıştırılmasını engelleyebilir. Bu rehberde PowerShell scriptlerini kod imzalama sertifikası ile nasıl imzalayacağınızı öğreneceksiniz.
Neden PowerShell Scriptlerini İmzalamalısınız?
- Execution Policy uyumluluğu: AllSigned veya RemoteSigned politikalarında gerekli
- Script bütünlüğü: Scriptin değiştirilmediğini garanti eder
- Kimlik doğrulama: Scriptin kim tarafından yazıldığını kanıtlar
- Kurumsal zorunluluk: IT politikaları genellikle imzalı script gerektirir
PowerShell Execution Policy Seviyeleri
| Policy | Açıklama | İmza Gerekli mi? |
|---|---|---|
| Restricted | Script çalıştırma engelli | - |
| AllSigned | Tüm scriptler imzalı olmalı | ✅ Evet |
| RemoteSigned | İndirilen scriptler imzalı olmalı | ⚠️ Kısmen |
| Unrestricted | Kısıtlama yok | ❌ Hayır |
Adım 1: Sertifika Hazırlığı
Sertifikanızı Windows sertifika deposuna yükleyin:
# PFX dosyasını sertifika deposuna aktar
Import-PfxCertificate -FilePath "C:\sertifika\codesigning.pfx" -CertStoreLocation Cert:\CurrentUser\My -Password (ConvertTo-SecureString -String "sifre123" -AsPlainText -Force)
Adım 2: Sertifikayı Seçme
# Kod imzalama sertifikalarını listele $cert = Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert $cert | Format-Table Subject, Thumbprint, NotAfter # Belirli sertifikayı seç $cert = Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert | Where-Object { $_.Subject -like "*Şirket Adı*" }
Adım 3: Script İmzalama
# PowerShell scriptini imzala
Set-AuthenticodeSignature -FilePath "C:\scripts\myscript.ps1" -Certificate $cert -TimestampServer "http://timestamp.digicert.com" -HashAlgorithm SHA256
Başarılı çıktı:
Directory: C:\scripts
SignerCertificate Status Path
----------------- ------ ----
ABCDEF1234567890 Valid myscript.ps1
Adım 4: İmza Doğrulama
# İmzayı doğrula Get-AuthenticodeSignature -FilePath "C:\scripts\myscript.ps1" # Detaylı doğrulama $sig = Get-AuthenticodeSignature "C:\scripts\myscript.ps1" $sig.SignerCertificate | Format-List Subject, Issuer, NotBefore, NotAfter
Toplu Script İmzalama
# Klasördeki tüm PS1 dosyalarını imzala
$cert = Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert | Select-Object -First 1
Get-ChildItem "C:\scripts\*.ps1" -Recurse | ForEach-Object {
Set-AuthenticodeSignature -FilePath $_.FullName -Certificate $cert -TimestampServer "http://timestamp.digicert.com" -HashAlgorithm SHA256
Write-Host "Signed: $($_.Name)"
}
PowerShell Module İmzalama
PowerShell modüllerini imzalamak için modüldeki tüm PS1, PSM1 ve PSD1 dosyalarını imzalamanız gerekir:
# Modül dosyalarını imzala
Get-ChildItem "C:\Modules\MyModule" -Include *.ps1,*.psm1,*.psd1 -Recurse | ForEach-Object {
Set-AuthenticodeSignature $_.FullName $cert -TimestampServer "http://timestamp.digicert.com" -HashAlgorithm SHA256
}
İpuçları
- Timestamp her zaman ekleyin: Sertifika süresi dolsa bile imza geçerli kalır
- SHA-256 kullanın: SHA-1 güvenli değildir
- Script düzenlerseniz tekrar imzalayın: Her değişiklik imzayı geçersiz kılar
- CI/CD entegrasyonu: Build pipeline'ınızda otomatik imzalama ekleyin
Sonuç
PowerShell script imzalama, Set-AuthenticodeSignature cmdlet'i ile oldukça basittir. Kurumsal güvenlik politikalarına uyum sağlamak ve scriptlerinizin güvenilirliğini artırmak için kod imzalama sertifikası kullanın.
Yorumlar
Henüz yorum yapılmamış. İlk yorumu siz yapın!
Yorum Yaz