DLL'ler uygulamanın çalışma anında yüklediği bileşenlerdir. Ana exe imzalı olsa bile imzasız DLL'ler bazı güvenlik ürünlerinde ve uygulama denetim politikalarında (ör. AppLocker, WDAC) sorun çıkarabilir.
DLL imzalamanın nedenleri
- Bileşenlerin yayıncısını ve bütünlüğünü kanıtlamak.
- Kurumsal ortamlarda imzasız kodu engelleyen politikalara uyum.
- Antivirüs tarafından şüpheli işaretlenme ihtimalini azaltmak.
Tek DLL imzalama
signtool sign /fd SHA256 /tr http://timestamp.digicert.com /td SHA256 /a kutuphane.dll
Toplu imzalama
Bir klasördeki tüm DLL'leri tek komutla imzalamak için PowerShell kullanabilirsiniz:
Get-ChildItem -Path .in -Recurse -Filter *.dll | ForEach-Object {
& signtool sign /fd SHA256 /tr http://timestamp.digicert.com /td SHA256 /a $_.FullName
}
Üçüncü taraf DLL'leri (zaten imzalı olanlar) yeniden imzalamayın; yalnızca sizin ürettiklerinizi imzalayın. İmzalı olup olmadığını denetlemek için:
signtool verify /pa /v kutuphane.dll
Uygulama ipuçları
- Derleme çıktısı sonrasında, paketlemeden önce imzalayın.
- Her seferinde zaman damgası ekleyin.
- Çok sayıda dosya varsa imzalama işlemini tek bir betikte toplayın ve hata kodunu kontrol edin (
$LASTEXITCODE). - Bulut HSM kullanıyorsanız çok sayıda istek için oturum ve hız sınırlarını göz önünde bulundurun.
Yönetilen kod (.NET) notu
.NET derlemelerinde güçlü ad (strong name) imzası ile Authenticode imzası farklı kavramlardır. Strong name derleme kimliği içindir, Authenticode ise yayıncı kimliği ve bütünlük içindir. Biri diğerinin yerini tutmaz; gerekiyorsa ikisi birlikte uygulanabilir.
Sertifika seçimi için kod imzalama sayfasına, exe dosyaları için bilgi bankasındaki diğer rehberlere bakabilirsiniz.