Ana içeriğe geç

CI/CD ve Derleme Araçları

sslTrus uzak kod imzalama hizmeti; CI/CD, uygulama derleme ve kurulum paketi oluşturma süreçlerine entegre edilebilir. Derleme veya paketleme tamamlandıktan sonra yayınlanan ürünler üzerinde otomatik olarak kod imzalama gerçekleştirilir.

Şu anda desteklenen tipik entegrasyon senaryoları şunlardır:

  • GitHub Actions
  • Electron Builder
  • Advanced Installer

Derleme aracının yeteneklerine bağlı olarak, doğrudan sslTrus GitHub Action kullanılabilir, SignTool CLI çağrılabilir veya derleme aracının sağladığı özel imzalama arayüzü aracılığıyla entegrasyon tamamlanabilir.

GitHub Actions

sslTrus resmi GitHub Action sağlar:

ssltrus-official/code-sign-action

GitHub Actions Workflow'da derleme çıktıları üzerinde doğrudan uzaktan kod imzalama gerçekleştirebilirsiniz.

Action, imzalamayı tamamlamak için sslTrus uzaktan kod imzalama hizmetini çağırır ve belirtilen dosyaları doğrudan günceller; Linux, macOS ve Windows Runner için uygundur.

GitHub Secrets'ı Hazırlama

Uzaktan kod imzalama kimlik bilgilerini GitHub Actions Secrets içinde saklamanız önerilir:

SSLTRUS_ACCESS_KEY
SSLTRUS_ACCESS_SECRET
SSLTRUS_CERT_CODE

Access Secret'i doğrudan Workflow dosyasına yazmayın.

Temel Yapılandırma

- name: Sign files
uses: ssltrus-official/code-sign-action@v1
with:
access-key: ${{ secrets.SSLTRUS_ACCESS_KEY }}
access-secret: ${{ secrets.SSLTRUS_ACCESS_SECRET }}
cert-code: ${{ secrets.SSLTRUS_CERT_CODE }}
files: build/app.exe

İmzalama başarılı olduktan sonra, build/app.exe doğrudan imzalanan dosyayla değiştirilecektir.

Birden fazla dosyayı imzalama

files birden fazla dosyayı çok satırlı olarak yapılandırmayı destekler:

- name: Sign files
uses: ssltrus-official/code-sign-action@v1
with:
access-key: ${{ secrets.SSLTRUS_ACCESS_KEY }}
access-secret: ${{ secrets.SSLTRUS_ACCESS_SECRET }}
cert-code: ${{ secrets.SSLTRUS_CERT_CODE }}
files: |
build/app.exe
build/library.dll
build/installer.msi

Yolları virgülle ayırarak da belirtebilirsiniz.

Yinelenen dosya yolları yalnızca bir kez işlenir.

Tam yapılandırma

- name: Sign files
uses: ssltrus-official/code-sign-action@v1
with:
access-key: ${{ secrets.SSLTRUS_ACCESS_KEY }}
access-secret: ${{ secrets.SSLTRUS_ACCESS_SECRET }}
cert-code: ${{ secrets.SSLTRUS_CERT_CODE }}
files: |
build/app.exe
build/library.dll
build/installer.msi
dry-run: false
timestamp-rfc3161: http://timestamp.acs.microsoft.com
description: Example Application
description-url: https://example.com

Ana parametreler:

ParametreZorunluVarsayılan değerAçıklama
access-keyEvet-sslTrus Access Key
access-secretEvet-sslTrus Access Secret
cert-codeEvet-Kod imzalama sertifikası numarası
filesEvet-İmzalanacak dosya yolu
nicsrsHayırfalseNICSRS hizmetinin kullanılıp kullanılmayacağı
dry-runHayırfalseYerel test sertifikası kullanarak test imzası gerçekleştir
timestamp-rfc3161HayırautoRFC 3161 zaman damgası sunucusu
descriptionHayır-Authenticode imzasına yazılacak program açıklaması
description-urlHayır-Authenticode imzasına yazılacak program URL'si

Eksiksiz Workflow Örneği

Aşağıda, Windows Runner'da derleyen, imzalayan ve derleme çıktılarını yükleyen bir örnek yer almaktadır:

name: Build and Sign

on:
workflow_dispatch:

permissions:
contents: read

jobs:
build:
runs-on: windows-latest

steps:
- name: Check out repository
uses: actions/checkout@v7

- name: Build
run: |
# 在这里执行实际构建命令

- name: Sign files
uses: ssltrus-official/code-sign-action@v1
with:
access-key: ${{ secrets.SSLTRUS_ACCESS_KEY }}
access-secret: ${{ secrets.SSLTRUS_ACCESS_SECRET }}
cert-code: ${{ secrets.SSLTRUS_CERT_CODE }}
files: |
build/app.exe
build/library.dll
timestamp-rfc3161: http://timestamp.acs.microsoft.com

- name: Upload signed files
uses: actions/upload-artifact@v7
with:
name: signed-files
path: |
build/app.exe
build/library.dll

İmzalama adımının şuraya yerleştirilmesi önerilir:

Derleme → Paketleme → Kod imzalama → Yayınlama

Akıştaki yayımlama adımından önce.

Çok Platformlu Runner

GitHub Action farklı Runner'larda çağrılabilir:

strategy:
matrix:
os:
- ubuntu-latest
- macos-latest
- windows-latest

runs-on: ${{ matrix.os }}

Bu nedenle, derleme görevi Linux veya macOS üzerinde çalışsa bile desteklenen dosyaların uzaktan imzalanması için aynı Action kullanılabilir.

Dry Run

Workflow ve dosya işleme mantığını doğrulamanız gerekiyorsa şunu etkinleştirebilirsiniz:

dry-run: true

Bu mod, yerel test sertifikası kullanır ve uzak kod imzalama hizmetini çağırmaz.

Örneğin:

- name: Test signing
uses: ssltrus-official/code-sign-action@v1
with:
access-key: dummy
access-secret: dummy
cert-code: dummy
files: build/app.exe
dry-run: true

dry-run yine de hedef dosyayı değiştirir, bu nedenle bunu dosyaları hiç değiştirmeyen bir önizleme modu olarak anlamayın.

Electron Builder

Electron Builder, özel imzalama işlevi aracılığıyla sslTrus SignTool CLI'yi çağırabilir ve böylece Electron uygulaması derleme sürecinde Windows yürütülebilir dosyalarının ve kurulum paketlerinin imzalanmasını otomatik olarak tamamlayabilir.

Tipik akış:

Electron Builder

customSign

SignTool CLI

sslTrus 远程代码签名服务

云端 HSM

Ön Koşullar

Başlamadan önce aşağıdakilere ihtiyacınız vardır:

  • Kullanılabilir bir sslTrus uzaktan kod imzalama hizmetiniz olmalıdır.
  • Access Key ve Access Secret edinilmiş olmalıdır.
  • Kod imzalama sertifika numarası edinilmiş olmalıdır.
  • Electron projesi electron-builder ile derlenmiş olmalıdır.
  • Derleme ortamı sslTrus SignTool CLI'yi çalıştırabilmeli; bu araç sslTrus istemci sürüm sayfasından indirilebilir.

Kimlik Bilgilerini Yapılandırma

Kimlik bilgileri, ortam değişkenleri aracılığıyla derleme betiğine aktarılabilir:

Linux ve macOS:

export SIGNTOOL_ACCESS_KEY="YOUR_ACCESS_KEY"
export SIGNTOOL_ACCESS_SECRET="YOUR_ACCESS_SECRET"
export SIGNTOOL_CERT_CODE="YOUR_CERT_CODE"

Windows PowerShell:

$env:SIGNTOOL_ACCESS_KEY = "YOUR_ACCESS_KEY"
$env:SIGNTOOL_ACCESS_SECRET = "YOUR_ACCESS_SECRET"
$env:SIGNTOOL_CERT_CODE = "YOUR_CERT_CODE"

Bu değişkenler, Electron özel imzalama betiği tarafından okunur ve ardından SignTool CLI'ye aktarılır.

Electron Builder'ı Yapılandırma

Şurada:

electron-builder.mjs

Veya projenin gerçekte kullandığı Electron Builder yapılandırma dosyasında, Windows için özel bir imzalama fonksiyonu ayarlayın:

export default {
win: {
target: [
{
target: 'nsis',
arch: ['x64'],
},
],
sign: customSign,
signingHashAlgorithms: ['sha256'],
},
};

Burada win.sign, Electron Builder'ın resmi olarak sağladığı özel imzalama giriş noktasıdır; ayrıntılı açıklama için Electron Builder Windows kod imzalama belgelerine bakın.

customSign

sslTrus SignTool CLI'sini çağırmaktan sorumludur.

Özel imzalama işlevi

Örnek:

import { execFileSync } from 'node:child_process';

async function customSign(configuration) {
const {
SIGNTOOL_ACCESS_KEY,
SIGNTOOL_ACCESS_SECRET,
SIGNTOOL_CERT_CODE,
} = process.env;

if (
!SIGNTOOL_ACCESS_KEY ||
!SIGNTOOL_ACCESS_SECRET ||
!SIGNTOOL_CERT_CODE
) {
throw new Error('Missing sslTrus signing credentials');
}

execFileSync(
'./signtool',
[
'sign',
'--access-key',
SIGNTOOL_ACCESS_KEY,
'--access-secret',
SIGNTOOL_ACCESS_SECRET,
'--cert-code',
SIGNTOOL_CERT_CODE,
'--file',
configuration.path,
'--override=true',
'--sha1=false',
'--sha2=true',
'--timestamp-rfc3161=http://timestamp.acs.microsoft.com',
],
{
stdio: 'inherit',
},
);
}

Alt süreçlerin tam Shell komutunu birleştirmek yerine parametre dizisi kullanılarak çağrılması önerilir; bu, yol kaçış karakterleri ve özel karakter işleme sorunlarını azaltır.

Electron Builder, signingHashAlgorithms içindeki her karma algoritması için imzalama işlevini ayrı ayrı çağırır. Yukarıdaki örnekte yalnızca SHA-256 etkinleştirildiğinden her dosya için bir kez çağrılır.

Derlemeyi Çalıştırma

Yapılandırma tamamlandıktan sonra Electron Builder’ı normal şekilde çalıştırın:

npx electron-builder build \
--config electron-builder.mjs \
--win \
--x64

Electron Builder, dosyaları imzalaması gerektiğinde customSign'i otomatik olarak çağırır.

Tek bir Electron derlemesi birden fazla dosyayı imzalayabilir, örneğin:

MyApp.exe
helper.dll
update.exe
uninstall.exe
MyApp Setup.exe

Bu nedenle, "bir Electron paketlemesi yalnızca bir imzalama üretir" şeklinde basitçe anlaşılmamalıdır.

Gerçek imzalama sayısı, yapı sürecinde kaç dosyanın uzak imzalama gerçekleştirdiğine bağlıdır.

Advanced Installer

Advanced Installer, Windows Installer teknolojisine dayalı bir kurulum paketi oluşturma aracıdır.

Advanced Installer'ın özel imzalama aracı işlevi aracılığıyla sslTrus SignTool CLI çağrılarak MSI, EXE, CAB gibi yapı çıktılarının paketleme sürecinde otomatik olarak uzak kod imzalama tamamlaması sağlanabilir.

Ön Koşullar

Aşağıdakilerin hazırlanması gerekir:

  • sslTrus SignTool CLI, sslTrus istemci yayın sayfasından indirilebilir.
  • Access Key.
  • Access Secret.
  • Sertifika numarası.
  • Yapılandırması tamamlanmış Advanced Installer projesi.

Özel İmzalama Aracını Yapılandırma

Advanced Installer projesinin şu bölümünü açın:

Digital Signature

Yapılandırma sayfası.

Kod imzalama etkinleştirildikten sonra imzalama aracını şu şekilde seçin:

Custom

SSL imzalama aracı yolunu sslTrus SignTool CLI yürütülebilir dosyası olarak ayarlayın.

Örneğin:

C:\Tools\sslTrus\signtool.exe

Özel parametrelerin çağrılması gerekir:

sign

Alt komut ve istemciye şunları iletin:

  • Access Key
  • Access Secret
  • Cert Code
  • SHA-2 imza ayarı
  • Zaman damgası sunucusu
  • Dosya yolu

Access Key ve Access Secret bilgilerini öncelikle güvenli bir yöntemle sağlamanız ve uzun süre geçerli Access Secret değerini herkese açık proje dosyalarında düz metin olarak saklamaktan kaçınmanız önerilir.

SignTool parametre örneği

İlgili imzalama mantığı şuna benzer:

signtool.exe sign ^
--access-key="YOUR_ACCESS_KEY" ^
--access-secret="YOUR_ACCESS_SECRET" ^
--cert-code="YOUR_CERT_CODE" ^
--nest=true ^
--sha1=false ^
--sha2=true ^
--timestamp-rfc3161=http://timestamp.acs.microsoft.com ^
--desc="Example Application" ^
--override=true ^
--file "app.exe"

Advanced Installer'da, gerçek dosya yolu kendi özel imzalama aracı mekanizması tarafından iletilmelidir; örnekteki app.exe olarak sabitlenmemelidir.

Derleme Yapılandırması

Advanced Installer ile kurulum paketi içindeki dosyaları otomatik olarak imzalıyorsanız, derleme ve sıkıştırma yöntemini de kontrol etmeniz gerekir.

Projenin gerçek yapılandırmasına bağlı olarak, bazı CAB arşivleme yöntemleri özel imzalama sürecini etkileyebilir; son olarak imzalanması gereken dosyaların ilgili aşamada çağrılabildiğinden emin olunmalıdır.

Yapılandırma tamamlandıktan sonra, Advanced Installer'ın dijital imza sayfasında kontrol edebilirsiniz:

Files configured for signing

Böylece, derleme sürecinde hangi dosyaların imzalanacağı doğrulanır.

İmzalama Sayısı

Advanced Installer, tek bir kurulum paketi derleme sürecinde birden fazla dosyayı ayrı ayrı imzalayabilir.

Örneğin:

Dosyaİmza
app.exe1 kez
helper.dll1 kez
uninstall.exe1 kez
installer.msi1 kez
Toplam4 kez

Bu nedenle:

一次构建 ≠ 一次签名

Gerçek uzaktan imzalanan dosya veya imza eylemi sayısına göre hesaplanmalıdır.

İmza sayısı

CI/CD ve derleme araçları genellikle birden fazla çıktıyı otomatik olarak işlediğinden, imza sayısına özellikle dikkat edilmelidir.

Temel ilkeler:

签名次数 = 实际成功完成的签名动作数量

Örneğin:

app.exe        → 1 次
library.dll → 1 次
installer.msi → 1 次

Üç dosya da başarıyla imzalanırsa:

合计 = 3 次

Electron Builder ve Advanced Installer gibi derleme araçları ayrıca otomatik olarak şunları oluşturup imzalayabilir:

  • Ana program.
  • DLL.
  • Güncelleme programı.
  • Kaldırma programı.
  • MSI.
  • EXE kurulum paketi.
  • Diğer yardımcı yürütülebilir dosyalar.

Bu nedenle imza sayısı, Pipeline veya Build yürütme sayısına göre tahmin edilmek yerine derleme günlüklerine ve gerçek imzalı ürünlere göre doğrulanmalıdır.

Daha fazla kural için Referanslara bakın.

Zaman Damgası

Resmi olarak yayımlanan yazılımlar için genellikle güvenilir zaman damgası eklenmesi önerilir.

GitHub Actions, Electron Builder ve Advanced Installer entegrasyonlarının tümü RFC 3161 zaman damgasını kullanabilir; örneğin:

http://timestamp.acs.microsoft.com

Zaman damgası yeni bir kod imzalama işlemi değildir ve kod imzalama sayısını ayrıca artırmaz.

Farklı TSA'ların protokol desteği ve kullanım kısıtlamaları için lütfen referans materyallerine bakın.

Kimlik Bilgisi Güvenliği

Otomasyon ortamında özellikle korunması gerekenler:

Access Key
Access Secret
Cert Code

Access Secret gizli anahtar olarak yönetilmelidir ve şunlar yapılmamalıdır:

  • Git deposuna gönderilmemelidir.
  • Herkese açık Workflow içinde düz metin olarak yazılmamalıdır.
  • Derleme günlüklerine çıktı olarak verilmemelidir.
  • Herkese açık Docker imajlarına yazılmamalıdır.
  • Güvenli olmayan yollarla üçüncü taraf derleme sistemlerine aktarılmamalıdır.

GitHub Actions için önerilenler:

GitHub Actions Secrets

Diğer CI/CD sistemleri kendi Secret, Credential veya Variable yönetim mekanizmalarını kullanmalıdır.

Nasıl seçilir

SenaryoÖnerilen yöntem
GitHub Actions WorkflowGitHub Actions
Electron uygulama derlemesiElectron Builder
MSI / EXE kurulum paketi oluşturmaAdvanced Installer
Genel Shell / PowerShell otomasyonuSignTool CLI
Windows yazılımı yerel KSP desteğiWindows Provider
Kendi imzalama sürecinizi geliştirmeAPI entegrasyonu

Derleme sistemi komut satırı programlarını doğrudan çağırabiliyorsa SignTool CLI kullanılabilir; araç zaten standart Windows KSP/CSP arayüzü sağlıyorsa, ilgili Windows Provider entegrasyon yöntemi öncelikli olarak tercih edilir.