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

CI/CD Pipeline'da Cloud Kod İmzalama Kullanımı

CI/CD pipeline'da cloud kod imzalama nasıl entegre edilir? GitHub Actions, Azure DevOps ve Jenkins örnekleri ile adım adım rehber.

3 dk okuma

Modern yazılım geliştirmede CI/CD pipeline vazgeçilmez. Ancak build çıktılarının kod imzalama ile güvenliğini sağlamak da aynı derecede kritik. Cloud Kod İmzalama, pipeline entegrasyonunu mümkün kılıyor.

Neden CI/CD Pipeline'da İmzalama?

  • Otomasyon: Her build otomatik imzalanır, manuel süreç yok
  • Tutarlılık: Tüm çıktılar standart şekilde imzalanır
  • Güvenlik: İmzalama adımı atlanamaz
  • Hız: Build-sign-deploy süreci dakikalar içinde tamamlanır
  • Denetim: Her imzalama loglanır ve izlenebilir

Cloud Kod İmzalama Pipeline Mimarisi

Tipik bir pipeline akışı:

  1. Source: Kod değişikliği commit/push edilir
  2. Build: Uygulama derlenir, çıktı oluşur
  3. Test: Otomatik testler çalışır
  4. Sign: Build çıktıları cloud signing ile imzalanır
  5. Verify: İmzalar doğrulanır
  6. Deploy: İmzalı çıktılar dağıtılır

GitHub Actions Entegrasyonu

name: Build, Sign and Release
on:
  push:
    tags: ['v*']
    
jobs:
  build-sign-release:
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Setup .NET
        uses: actions/setup-dotnet@v4
        with:
          dotnet-version: '8.0.x'
          
      - name: Build
        run: dotnet publish -c Release -o ./publish
        
      - name: Install Signing Client
        run: |
          # DigiCert KeyLocker client kurulumu
          Invoke-WebRequest -Uri ${{ secrets.SM_TOOLS_URL }} -OutFile smtools.msi
          Start-Process msiexec -ArgumentList "/i smtools.msi /quiet" -Wait
          
      - name: Configure Signing
        env:
          SM_HOST: ${{ secrets.SM_HOST }}
          SM_API_KEY: ${{ secrets.SM_API_KEY }}
          SM_CLIENT_CERT_FILE: ${{ secrets.SM_CLIENT_CERT }}
          SM_CLIENT_CERT_PASSWORD: ${{ secrets.SM_CLIENT_CERT_PW }}
        run: smctl windows certsync
        
      - name: Sign Executables
        run: |
          Get-ChildItem ./publish -Filter *.exe | ForEach-Object {
            signtool sign /sha1 ${{ secrets.CERT_THUMBPRINT }} `
              /tr http://timestamp.digicert.com /td sha256 /fd sha256 /v $_.FullName
          }
          
      - name: Verify Signatures
        run: |
          Get-ChildItem ./publish -Filter *.exe | ForEach-Object {
            signtool verify /pa /v $_.FullName
          }

Azure DevOps Pipeline

# azure-pipelines.yml
trigger:
  tags:
    include: ['v*']

pool:
  vmImage: 'windows-latest'

steps:
  - task: DotNetCoreCLI@2
    inputs:
      command: 'publish'
      arguments: '-c Release -o $(Build.ArtifactStagingDirectory)'
      
  - task: PowerShell@2
    displayName: 'Sign Executables'
    inputs:
      targetType: 'inline'
      script: |
        # Signing client yapılandırma
        $env:SM_API_KEY = "$(SM_API_KEY)"
        smctl windows certsync
        
        # Tüm exe dosyalarını imzala
        Get-ChildItem $(Build.ArtifactStagingDirectory) -Filter *.exe | ForEach-Object {
          signtool sign /sha1 $(CERT_THUMBPRINT) /tr http://timestamp.digicert.com /td sha256 /fd sha256 /v $_.FullName
        }

Jenkins Pipeline

// Jenkinsfile
pipeline {
    agent { label 'windows' }
    
    stages {
        stage('Build') {
            steps {
                bat 'dotnet publish -c Release -o publish'
            }
        }
        
        stage('Sign') {
            steps {
                withCredentials([
                    string(credentialsId: 'sm-api-key', variable: 'SM_API_KEY'),
                    string(credentialsId: 'cert-thumbprint', variable: 'THUMBPRINT')
                ]) {
                    powershell '''
                        Get-ChildItem ./publish -Filter *.exe | ForEach-Object {
                            signtool sign /sha1 $env:THUMBPRINT /tr http://timestamp.digicert.com /td sha256 /fd sha256 /v $_.FullName
                        }
                    '''
                }
            }
        }
    }
}

Güvenlik En İyi Pratikleri

PratikAçıklama
Secret ManagementAPI key ve sertifika bilgilerini pipeline secret'larında saklayın
IP Kısıtlamaİmzalama API erişimini CI/CD runner IP aralığına sınırlayın
İmza DoğrulamaHer imzalama sonrası otomatik doğrulama adımı ekleyin
Audit Logİmzalama geçmişini izleyin ve anomalilere alarm kurun
Least PrivilegeCI/CD service account yalnızca imzalama yetkisine sahip olsun

Sıkça Sorulan Sorular (FAQ)

Certum SimplySign CI/CD pipeline'da kullanılabilir mi?

Certum SimplySign her imzalama için mobil onay istediği durumlarda CI/CD otomasyonu kısıtlanabilir. Tam otomasyon için DigiCert KeyLocker veya PKCS#11 tabanlı çözümler daha uygun olabilir. Bununla birlikte Certum API entegrasyonu gelişmektedir.

Pipeline'da imzalama ne kadar süre ekler?

Hash hesaplama ve API çağrısı genellikle dosya başına 5-15 saniye sürer. 10 dosyalık tipik bir build için toplam 1-2 dakika ek süre beklenir.

Bu yazıyı paylaş
Yazar

Ali Yiğit

Önerilen Kod İmzalama Sertifikaları

Tüm Ürünler
CODESIGNING DigiCert

DigiCert Kod İmzalama

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

21.277,70 ₺ /yıl
Detaylar
EVCODESIGNING DigiCert

DigiCert EV Kod İmzalama

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

28.813,56 ₺ /yıl
Detaylar
CLOUDCODESIGNING Certum

Certum Standard Cloud Kod İmzalama

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

7.979,14 ₺ /yıl
Detaylar

Yorumlar

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

Yorum Yaz