Modern yazılım geliştirmede birçok uygulama cross-platform olarak dağıtılır. Electron, Flutter, Tauri gibi framework'ler ile tek codebase'den Windows, macOS ve Linux build'leri oluşturulur. Her platform için farklı imzalama gereksinimleri vardır.
🎯 Temel Soru: Her platform için ayrı sertifika mı almam lazım?
Kısa cevap: Windows ve Java için aynı kod imzalama sertifikasını kullanabilirsiniz. macOS için ise Apple Developer sertifikası gereklidir.
Platform Bazlı İmzalama Gereksinimleri
| Platform | Gerekli Sertifika | İmzalama Aracı | Ek Gereksinim |
|---|---|---|---|
| Windows | OV/EV Code Signing | SignTool | Timestamp zorunlu |
| macOS | Apple Developer ID | codesign | Notarization + Hardened Runtime |
| Linux | GPG anahtarı veya Code Signing | gpg / rpmsign / dpkg-sig | Paket yöneticisine göre değişir |
| Java (JAR) | OV/EV Code Signing | jarsigner | Keystore dönüşümü gerekebilir |
Tek Sertifika ile Çoklu Platform
Bir OV veya EV Code Signing sertifikası ile şunları imzalayabilirsiniz:
- ✅ Windows: EXE, DLL, MSI, MSIX, PowerShell
- ✅ Java: JAR, WAR, EAR dosyaları
- ✅ Linux: osslsigncode ile PE formatı (Windows binary'lerini Linux'ta imzalama)
- ❌ macOS: Apple ekosistemi kendi sertifika sistemini kullanır
Cross-Platform CI/CD Pipeline Yapısı
name: Multi-Platform Build & Sign
on:
push:
tags: ['v*']
jobs:
build-windows:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Build
run: npm run build:win
- name: Sign Windows Binary
run: signtool sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /a "dist/MyApp.exe"
- uses: actions/upload-artifact@v4
with: { name: windows-build, path: dist/*.exe }
build-macos:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: Build
run: npm run build:mac
- name: Sign & Notarize macOS
env:
APPLE_ID: ${{ secrets.APPLE_ID }}
TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
run: |
codesign --sign "Developer ID Application: $TEAM_ID" --timestamp --options runtime dist/MyApp.app
xcrun notarytool submit dist/MyApp.dmg --apple-id "$APPLE_ID" --team-id "$TEAM_ID" --wait
xcrun stapler staple dist/MyApp.dmg
build-linux:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build
run: npm run build:linux
- name: Sign with GPG
run: |
echo "${{ secrets.GPG_PRIVATE_KEY }}" | gpg --import
gpg --detach-sign --armor dist/MyApp.AppImage
Electron Uygulaması İmzalama
Electron, en popüler cross-platform framework'tür. electron-builder ile otomatik imzalama:
// package.json veya electron-builder.yml
{
"build": {
"win": {
"signingHashAlgorithms": ["sha256"],
"certificateSubjectName": "Your Company Name",
"sign": "./custom-sign.js" // Cloud HSM için özel script
},
"mac": {
"identity": "Developer ID Application: Your Company (TEAMID)",
"notarize": {
"teamId": "TEAMID"
},
"hardenedRuntime": true
},
"linux": {
"target": ["AppImage", "deb", "rpm"]
}
}
}
Maliyet Karşılaştırması
| Kalem | Yıllık Maliyet |
|---|---|
| OV Code Signing (Windows + Java) | ~$70-200 |
| Apple Developer Program (macOS + iOS) | $99 |
| GPG anahtarı (Linux) | Ücretsiz |
| Toplam (3 platform) | ~$170-300/yıl |
En İyi Uygulamalar
- Her platform için timestamp kullanın — Sertifika süresi dolsa bile imzalar geçerli kalır.
- macOS Notarization'ı atlam ayın — Apple, notarize edilmemiş uygulamaları engeller.
- Linux'ta imzayı paket yöneticisi ile entegre edin — apt/yum repo'nuzda GPG imzası zorunlu olsun.
- Cloud Code Signing düşünün — 3 farklı OS'te build yapan CI/CD için USB token pratik değildir.
- İmza doğrulama testleri yazın — Her platformda otomatik doğrulama adımı ekleyin.
Sonuç
Multi-platform yazılım dağıtımı, her platform için ayrı imzalama stratejisi gerektirir. Windows ve Java için tek bir kod imzalama sertifikası, macOS için Apple Developer sertifikası ve Linux için GPG anahtarı ile yıllık toplam ~$200'ın altında tüm platformlarınızı kapsayabilirsiniz.
Windows ve Java için uygun fiyatlı OV, EV ve Cloud sertifikalar için ürünlerimizi inceleyin.