Yazdığınız programı kullanıcılarınıza güvenle dağıtmak istiyorsanız, kod imzalama sertifikası ile dijital olarak imzalamanız gerekir. Bu rehberde, sıfırdan başlayarak bir Windows programını nasıl imzalayacağınızı anlattık.
Kod İmzalama Nedir ve Neden Gereklidir?
Kod İmzalama, yazılım dosyalarınıza dijital bir imza ekleyerek dosyanın sizin tarafınızdan oluşturulduğunu ve dağıtımdan sonra değiştirilmediğini kanıtlama işlemidir. İmzalama yapıldığında:
- Windows "Bilinmeyen yayıncı" uyarısı yerine şirket/geliştirici adınız görünür
- SmartScreen güvenlik filtresinden sorunsuz geçer (EV sertifika ile anında)
- Antivirüs yazılımları dosyanızı daha az şüpheli bulur
- Kullanıcılarınız yazılımınıza güvenir
Gerekli Araçlar
| Araç | Açıklama | Nereden? |
|---|---|---|
| Windows SDK | SignTool aracını içerir | Microsoft Developer |
| Kod İmzalama Sertifikası | EV veya OV sertifika | KodImzalama.com |
| Cloud İstemci | SimplySign/KeyLocker/CodeSignTrust | Sertifika sağlayıcınız |
Adım 1: Windows SDK Kurulumu
SignTool, Windows SDK ile birlikte gelir. Yalnızca "Windows SDK Signing Tools" bileşenini kurmanız yeterlidir:
# SDK kurulumu sonrası SignTool konumu:
# C:\Program Files (x86)\Windows Kits\10\bin\10.0.xxxxx.0\x64\signtool.exe
# PATH'e ekleme (PowerShell - Admin)
$sdkPath = "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64"
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";$sdkPath", "User")
Adım 2: Sertifikanızı Yapılandırın
Cloud sertifikanız aktif olduktan sonra, ilgili platformun istemcisini kurun:
Certum SimplySign için:
- SimplySign Desktop uygulamasını kurun
- Certum hesabınızla giriş yapın
- Mobil uygulamadan onay verin
- Sertifika otomatik olarak Windows sertifika deposuna yüklenir
DigiCert KeyLocker için:
- DigiCert One istemcisini kurun
- API anahtarınızı ve istemci sertifikanızı yapılandırın
- smctl aracı ile PKCS11 kütüphanesini kaydedin
Adım 3: Sertifika Parmak İzini Bulun
# PowerShell ile sertifika listesi
Get-ChildItem Cert:\CurrentUser\My | Format-List Subject, Thumbprint, NotAfter
# Çıktı örneği:
# Subject : CN=Şirket Adınız, O=Şirket Adınız, L=İstanbul, C=TR
# Thumbprint: A1B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2
# NotAfter : 28.03.2027 00:00:00
Thumbprint değerini not alın, imzalama komutunda kullanacaksınız.
Adım 4: Dosyayı İmzalayın
# Temel imzalama komutu
signtool sign /sha1 A1B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2 /tr http://timestamp.digicert.com /td sha256 /fd sha256 /v myapp.exe
# Parametre açıklamaları:
# /sha1 : Sertifika parmak izi (thumbprint)
# /tr : RFC 3161 timestamp sunucusu URL
# /td sha256: Timestamp digest algoritması
# /fd sha256: Dosya digest algoritması
# /v : Verbose (detaylı çıktı)
Yaygın Timestamp Sunucuları
| Sağlayıcı | Timestamp URL |
|---|---|
| DigiCert | http://timestamp.digicert.com |
| Sectigo | http://timestamp.sectigo.com |
| Certum | http://time.certum.pl |
| GlobalSign | http://timestamp.globalsign.com/tsa/r6advanced1 |
Adım 5: İmzayı Doğrulayın
# İmza doğrulama
signtool verify /pa /v myapp.exe
# Başarılı çıktı:
# Verifying: myapp.exe
# Signature Index: 0 (Primary Signature)
# Hash of file (sha256): 1234...
# Signing Certificate Chain:
# CN=CA Root
# CN=CA Intermediate
# CN=Şirket Adınız
# The signature is timestamped: 28 Mar 2026 10:30:00
# Timestamp Verified by: CN=DigiCert Timestamp
# Successfully verified: myapp.exe
Birden Fazla Dosya İmzalama
# PowerShell ile toplu imzalama
$thumbprint = "A1B2C3D4E5F6..."
$timestamp = "http://timestamp.digicert.com"
$files = Get-ChildItem -Path ".\build\output" -Include *.exe,*.dll,*.msi -Recurse
foreach ($file in $files) {
Write-Host "Imzalaniyor: $($file.Name)"
signtool sign /sha1 $thumbprint /tr $timestamp /td sha256 /fd sha256 $file.FullName
}
Write-Host "Toplam $($files.Count) dosya imzalandi."
Sıkça Sorulan Sorular (FAQ)
İmzalama sırasında hata alıyorum, ne yapmalıyım?
En sık karşılaşılan hata "No certificates were found" hatasıdır. Bu, cloud istemcinin çalışmadığı veya sertifikanın Windows deposuna yüklenmediği anlamına gelir. Cloud platformunuzun istemcisinin aktif olduğundan emin olun ve gerekirse yeniden giriş yapın.
SHA-1 mi SHA-256 mı kullanmalıyım?
Kesinlikle SHA-256 kullanın. SHA-1 güvenlik açısından zayıftır ve Windows 10+ sistemlerde SHA-1 ile imzalanmış dosyalar uyarı alabilir. Tüm modern imzalamalarda /fd sha256 ve /td sha256 parametrelerini kullanın.
Timestamp neden önemli?
Timestamp olmadan, sertifikanız süresi dolduğunda tüm imzalarınız geçersiz olur. Timestamp ile imzalama zamanı kaydedilir ve sertifika süresi dolsa bile imzalar geçerli kalır. Her zaman timestamp ekleyin!
Dual signing (SHA-1 + SHA-256) yapmam gerekir mi?
Windows 7 ve altını desteklemeniz gerekmiyorsa dual signing gerekli değildir. Modern dağıtımlarda yalnızca SHA-256 yeterlidir.
Yorumlar
Henüz yorum yapılmamış. İlk yorumu siz yapın!
Yorum Yaz