Kod İmzalama Sertifikaları Artık Çok Daha Uygun! — EV ve OV Kod İmzalama sertifikalarında özel kampanya fiyatları!
Anasayfa İletişim
Teknoloji

CI/CD Pipeline'da Kod İmzalama: GitHub Actions, Jenkins, Azure DevOps Rehberi

CI/CD pipeline'ınıza kod imzalama nasıl entegre edilir? GitHub Actions, Jenkins ve Azure DevOps için adım adım yapılandırma örnekleri.

4 dk okuma

CI/CD pipeline'da kod imzalama otomasyonu, modern yazılım geliştirme sürecinin vazgeçilmez bir parçasıdır. Her build'de yazılımınızı otomatik olarak imzalamak, hem güvenliği artırır hem de insan hatasını ortadan kaldırır. Bu rehberde GitHub Actions, Jenkins ve Azure DevOps platformlarında kod imzalama entegrasyonunu anlatıyoruz.

CI/CD'de Kod İmzalamanın Avantajları

  • Tutarlılık: Her build aynı standartta imzalanır
  • Hız: Manuel imzalama ihtiyacı ortadan kalkar
  • Güvenlik: Sertifika anahtarları güvenli vault'larda saklanır
  • İzlenebilirlik: Her imzalama işlemi loglanır
  • Uyumluluk: Compliance gereksinimleri otomatik karşılanır

Ön Koşullar

CI/CD pipeline'da kod imzalama için şunlar gereklidir:

  1. Cloud HSM tabanlı sertifika: USB Token CI/CD ortamında kullanılamaz
  2. Güvenli secret yönetimi: PFX şifreleri veya API anahtarları vault'ta saklanmalı
  3. SignTool veya platform aracı: Build agent'ta yüklü olmalı
  4. Timestamp sunucusu erişimi: Build agent internete erişebilmeli

GitHub Actions ile Kod İmzalama

Sertifikayı GitHub Secrets'a Ekleyin

PFX sertifikanızı Base64'e dönüştürün ve GitHub Secret olarak saklayın:

# PFX'i Base64'e dönüştür
base64 -i sertifika.pfx -o sertifika_base64.txt

GitHub repository Settings → Secrets → Actions → New secret:

  • SIGNING_CERTIFICATE: Base64 encoded PFX içeriği
  • SIGNING_PASSWORD: PFX şifresi

Workflow YAML Dosyası

name: Build and Sign
on: [push, pull_request]

jobs:
  build-and-sign:
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Build
        run: dotnet build --configuration Release
      
      - name: Decode Certificate
        run: |
          $cert = [System.Convert]::FromBase64String("${{ secrets.SIGNING_CERTIFICATE }}")
          [IO.File]::WriteAllBytes("cert.pfx", $cert)
      
      - name: Sign Binary
        run: |
          signtool sign /f cert.pfx /p "${{ secrets.SIGNING_PASSWORD }}" /tr http://timestamp.digicert.com /td sha256 /fd sha256 "bin\Release\app.exe"
      
      - name: Verify Signature
        run: signtool verify /pa "bin\Release\app.exe"
      
      - name: Cleanup
        if: always()
        run: Remove-Item cert.pfx -ErrorAction SilentlyContinue

Jenkins Pipeline ile Kod İmzalama

pipeline {
    agent { label 'windows' }
    
    environment {
        PFX_PASSWORD = credentials('code-signing-password')
    }
    
    stages {
        stage('Build') {
            steps {
                bat 'dotnet build --configuration Release'
            }
        }
        
        stage('Sign') {
            steps {
                withCredentials([file(credentialsId: 'code-signing-cert', variable: 'PFX_PATH')]) {
                    bat """
                        signtool sign /f "%PFX_PATH%" /p "%PFX_PASSWORD%" ^
                        /tr http://timestamp.digicert.com /td sha256 /fd sha256 ^
                        "bin\Release\app.exe"
                    """
                }
            }
        }
        
        stage('Verify') {
            steps {
                bat 'signtool verify /pa "bin\Release\app.exe"'
            }
        }
    }
}

Azure DevOps Pipeline ile Kod İmzalama

trigger:
  - main

pool:
  vmImage: 'windows-latest'

steps:
  - task: DotNetCoreCLI@2
    inputs:
      command: 'build'
      arguments: '--configuration Release'

  - task: DownloadSecureFile@1
    name: signingCert
    inputs:
      secureFile: 'code-signing.pfx'

  - script: |
      signtool sign /f "$(signingCert.secureFilePath)" /p "$(PFX_PASSWORD)" /tr http://timestamp.digicert.com /td sha256 /fd sha256 "$(Build.SourcesDirectory)\bin\Release\app.exe"
    displayName: 'Sign Binary'

  - script: |
      signtool verify /pa "$(Build.SourcesDirectory)\bin\Release\app.exe"
    displayName: 'Verify Signature'

Cloud HSM ile CI/CD Entegrasyonu

Cloud HSM kullanarak PFX dosyası pipeline'a aktarmak zorunda kalmadan imzalama yapabilirsiniz:

DigiCert KeyLocker

# KeyLocker CLI ile imzalama
smctl sign --keypair-alias "my-key" --input app.exe --output app_signed.exe

Certum SimplySign

SimplySign Desktop agent build agent üzerinde çalıştırılarak standart SignTool komutu ile imzalama yapılır.

Güvenlik En İyi Uygulamaları

  1. Sertifika dosyasını repo'ya eklemeyin — her zaman secret/vault kullanın
  2. İmzalama sonrası PFX dosyasını temizleyinalways() bloğunda silme işlemi yapın
  3. En az yetki prensibi: İmzalama secret'larına sadece gerekli pipeline'lar erişebilmeli
  4. Audit log aktif edin: Tüm imzalama işlemlerini kayıt altına alın
  5. Cloud HSM tercih edin: PFX dosyası yerine API tabanlı imzalama daha güvenlidir

Sık Sorulan Sorular

USB Token ile CI/CD pipeline'da imzalama yapabilir miyim?

USB Token fiziksel bağlantı gerektirdiğinden standart CI/CD ortamlarında kullanılamaz. Cloud HSM (DigiCert KeyLocker, Certum SimplySign, Azure Key Vault) veya PFX tabanlı çözümler kullanmanız gerekir.

PFX dosyasını pipeline'da güvenle nasıl saklarım?

GitHub Secrets, Jenkins Credentials, Azure DevOps Secure Files gibi platform sağlanan secret yönetim araçlarını kullanın. PFX dosyasını Base64 olarak encode edip secret olarak saklayabilirsiniz. Pipeline tamamlandığında dosyayı silmeyi unutmayın.

Bu yazıyı paylaş
Yazar

Ali Yiğit

Önerilen Kod İmzalama Sertifikaları

Tüm Ürünler
CODESIGNING DigiCert

DigiCert Code Signing

DigiCert OV Kod İmzalama. Dünyanın en güvenilir CA'sından Authenticode, Java JAR, Office VBA desteği

21.086,76 ₺ /yıl
Detaylar
EVCODESIGNING DigiCert

DigiCert EV Code Signing

DigiCert EV Kod İmzalama. SmartScreen anında itibar, WHQL portal erişimi, kernel-mode driver imzalam

28.554,99 ₺ /yıl
Detaylar
CLOUDCODESIGNING Certum

Certum Standard Cloud Code Signing

Certum Standard Cloud OV Kod İmzalama Sertifikası SimplySign ile Fiziksel token gerektirmez, mobil c

7.907,54 ₺ /yıl
Detaylar

Yorumlar

Henüz yorum yapılmamış. İlk yorumu siz yapın!

Yorum Yaz