SSL-certifikatens maximala livslängd reduceras till 200 dagar från mars 2026. Läs mer →

Azure Key Vault Code Signing: installationsguide

Den här guiden tar dig genom hela konfigurationen av Azure Key Vault Premium för Code Signing, från att skapa valvet till att signera din första fil med AzureSignTool. Fungerar med både OV och EV Code Signing-certifikat från DigiCert och GlobalSign.

Förutsättningar

  • Azure-prenumeration (valfri nivå, inklusive gratis)
  • .NET 8 SDK eller senare (för AzureSignTool). Ladda ner från dotnet.microsoft.com ↗
  • Ett Code Signing-certifikat från FairSSL (DigiCert eller GlobalSign, OV eller EV). Se produkter nedan

Endast DigiCert och GlobalSign-certifikat fungerar med Azure Key Vault. Sectigo/Comodo-certifikat är inte kompatibla eftersom Azure Key Vault inte stöder deras key attestation-format.

Steg 1: Skapa ett Azure Key Vault (Premium)

Gå till Azure-portalen och skapa en ny Key Vault-resurs. Den kritiska inställningen är prisnivån.

Key Vault-inställningar

  • Prisnivå: Premium (krävs för HSM-backed nycklar. Standard kan inte skapa RSA-HSM-nycklar)
  • Region: Välj en region nära din signeringsinfrastruktur
  • Behörighetsmodell: Azure role-based access control (RBAC) (rekommenderas)
  • Soft-delete: Aktiverat (standard, kan inte avaktiveras)
  • Purge protection: Rekommenderas att aktivera (förhindrar oavsiktlig permanent radering)

Alternativ med Azure CLI

az keyvault create \
  --name your-codesign-vault \
  --resource-group your-resource-group \
  --location westeurope \
  --sku premium \
  --enable-purge-protection true

Steg 2: Konfigurera RBAC-behörigheter

Azure Key Vault använder en separat behörighetsmodell för data plane-operationer. Att ha Owner eller Contributor på prenumerationen ger inte automatiskt åtkomst till nycklar och certifikat inne i valvet.

Nödvändiga roller för ditt användarkonto (konfiguration)

  • Key Vault Administrator på Key Vault-resursen

Tilldela via: Key Vault-resursen → Access control (IAM) → Add role assignment → Key Vault Administrator → välj din användare.

Nödvändiga roller för AzureSignTool (signering)

Den service principal eller managed identity som AzureSignTool använder behöver dessa tre roller:

  • Key Vault Crypto User (utför signeringsoperationer)
  • Key Vault Certificate User (läser certifikatmetadata)
  • Key Vault Secrets User (läser certifikatkedjan)

Azure CLI

# Tilldela Key Vault Administrator till dig själv
az role assignment create \
  --role "Key Vault Administrator" \
  --assignee your-email@example.com \
  --scope /subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.KeyVault/vaults/{vault-name}

Steg 3: Generera nyckel och CSR

I Azure-portalen, navigera till ditt Key Vault → Certificates → Generate/Import.

Inställningar för certifikatskapande

  • Method: Generate
  • Certificate Name: t.ex. codesign-2026 (din interna referens)
  • Type of CA: Certificate issued by a non-integrated CA
  • Subject: CN=Ditt Företagsnamn (måste matcha namnet registrerat hos CA:n)

Avancerad policykonfiguration

  • Extended Key Usages (EKUs): 1.3.6.1.5.5.7.3.3 (Code Signing)
  • Key Type: RSA-HSM
  • Key Size: 4096
  • Content Type: PEM
  • Exportable Private Key: No
  • Enable Certificate Transparency: No (krävs inte för Code Signing)

Klicka på Create. Certifikatet visas i listan med status "In progress". Klicka på det, sedan på Certificate OperationDownload CSR för att hämta CSR-filen.

Den privata nyckeln genereras inne i HSM:en och lämnar den aldrig. CSR:en innehåller enbart den publika nyckeln. Det är den du skickar till FairSSL/CA:n för signering.

Steg 4: Beställ certifikat och skicka in CSR

  1. 1
    Beställ ett Code Signing-certifikat från FairSSL. Välj DigiCert eller GlobalSign, OV eller EV. Välj "Azure Key Vault" som leveransmetod. Se produkter nedan.
  2. 2
    Skicka in CSR:en som du laddade ner från Azure Key Vault. Klistra in PEM-innehållet när du uppmanas under beställningsprocessen.
  3. 3
    Genomför organisationsvalidering. FairSSL utför den inledande OV-valideringen för GlobalSign på danska, svenska och engelska (ofta genomförd samma dag). CA:n utför sedan en oberoende andrahandskontroll.
  4. 4
    Ta emot det signerade certifikatet från CA:n. Du får vanligtvis flera filer: ditt Code Signing-certifikat, ett intermediate-certifikat och ett root-certifikat. Samla dem i en enda PEM-fil (se steg 5).

Steg 5: Importera det signerade certifikatet i Key Vault

Vi rekommenderar att samla alla certifikat i en enda PEM-fil: ditt Code Signing-certifikat först, sedan intermediate-certifikatet och sist root-certifikatet. Denna ordning säkerställer att Azure Key Vault kan validera hela certifikatkedjan.

Skapa den sammanslagna PEM-filen

Öppna en textredigerare och klistra in certifikaten i denna ordning (eller använd kommandot nedan):

-----BEGIN CERTIFICATE-----
(ditt Code Signing-certifikat)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(intermediate-certifikat från CA:n)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(root-certifikat från CA:n)
-----END CERTIFICATE-----

Med kommandoraden kan du sammanfoga filerna direkt:

cat codesign.pem intermediate.pem root.pem > fullchain.pem

Ladda upp till Key Vault

Gå tillbaka till ditt Key Vault → Certificates → klicka på det väntande certifikatet → Certificate OperationMerge Signed Request.

Ladda upp den sammanslagna PEM-filen (fullchain.pem). Azure Key Vault slår samman certifikatkedjan med den privata nyckeln som genererades i steg 3.

Efter sammanslagningen ändras certifikatets status till "Completed" och det är redo för signering.

Alternativ med Azure CLI

az keyvault certificate pending merge \
  --vault-name your-codesign-vault \
  --name codesign-2026 \
  --file fullchain.pem

Notera certifikatnamnet (t.ex. codesign-2026). Du behöver det för AzureSignTools -kvc-parameter.

Steg 6: Skapa en service principal för signering

AzureSignTool autentiserar till Key Vault med en service principal (Azure AD app registration) eller en managed identity. För CI/CD-pipelines på icke-Azure-infrastruktur, använd en service principal.

Skapa appregistreringen

  1. Gå till Azure Active Directory → App registrations → New registration
  2. Ge den ett beskrivande namn (t.ex. "CodeSign-Pipeline")
  3. Notera Application (client) ID och Directory (tenant) ID
  4. Gå till Certificates & secrets → New client secret → skapa en hemlighet och notera värdet

Tilldela Key Vault-roller till service principal

Gå till ditt Key Vault → Access control (IAM) → Add role assignment. Tilldela alla tre roller till din service principal:

  • Key Vault Crypto User
  • Key Vault Certificate User
  • Key Vault Secrets User

Azure CLI

# Skapa appregistrering
az ad app create --display-name "CodeSign-Pipeline"

# Skapa service principal
az ad sp create --id {app-id}

# Skapa client secret
az ad app credential reset --id {app-id} --years 2

# Tilldela roller (upprepa för varje roll)
az role assignment create \
  --role "Key Vault Crypto User" \
  --assignee {service-principal-id} \
  --scope /subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.KeyVault/vaults/{vault-name}

Lagra client secret säkert. I CI/CD-pipelines, använd hemliga pipelinevariabler eller ett valv. Committa aldrig hemligheter till GIT versionskontroll.

Steg 7: Installera AzureSignTool

AzureSignTool ↗ är en gratis, open source-ersättning för signtool.exe som signerar direkt från Azure Key Vault.

dotnet tool install --global AzureSignTool

Kräver .NET 8 SDK eller senare. Efter installationen är AzureSignTool tillgängligt som ett globalt kommando.

Alternativ: Jsign (cross-platform)

Jsign ↗ är ett Java-baserat signeringsverktyg som också stöder Azure Key Vault. Jsign körs på Windows, macOS och Linux, och kan signera .exe, .msi, .dll, PowerShell, Office-makron och Java/Android-appar (som brygga till jarsigner).

jsign --storetype AZUREKEYVAULT \
  --storepass "YOUR_CLIENT_ID|YOUR_CLIENT_SECRET|YOUR_TENANT_ID" \
  --keystore your-codesign-vault \
  --alias codesign-2026 \
  --tsaurl http://timestamp.digicert.com \
  MyApplication.exe

Jsign är ett bra alternativ om du inte har .NET installerat, eller om du signerar från macOS/Linux.

Steg 8: Signera din första fil

AzureSignTool sign \
  -kvu https://your-codesign-vault.vault.azure.net \
  -kvc codesign-2026 \
  -kvt YOUR_TENANT_ID \
  -kvi YOUR_CLIENT_ID \
  -kvs YOUR_CLIENT_SECRET \
  -fd sha256 \
  -tr http://timestamp.digicert.com \
  -td sha256 \
  "MyApplication.exe"

Parameterreferens

  • -kvu Key Vault URL (finns på Key Vaults översiktssida)
  • -kvc Certifikatnamn i Key Vault (namnet du valde i steg 3)
  • -kvt Azure tenant (directory) ID
  • -kvi Application (client) ID för din service principal
  • -kvs Client secret-värde
  • -fd File digest-algoritm (använd alltid sha256)
  • -tr RFC 3161 timestamp server URL
  • -td Timestamp digest-algoritm (använd alltid sha256)

Verifiera signaturen

signtool verify /pa /v "MyApplication.exe"

Utdata bör visa "Successfully verified" med ditt företagsnamn och en giltig tidsstämpel.

CI/CD-integration

AzureSignTool fungerar i vilken CI/CD-pipeline som helst som stöder .NET. Lagra dina Key Vault-uppgifter som hemliga pipelinevariabler.

Azure DevOps (YAML)

- task: DotNetCoreCLI@2
  displayName: 'Install AzureSignTool'
  inputs:
    command: 'custom'
    custom: 'tool'
    arguments: 'install --global AzureSignTool'

- script: |
    AzureSignTool sign \
      -kvu $(KeyVaultUrl) \
      -kvc $(CertificateName) \
      -kvt $(TenantId) \
      -kvi $(ClientId) \
      -kvs $(ClientSecret) \
      -fd sha256 \
      -tr http://timestamp.digicert.com \
      -td sha256 \
      "$(Build.ArtifactStagingDirectory)\**\*.exe"
  displayName: 'Sign executables'

GitHub Actions

- name: Install AzureSignTool
  run: dotnet tool install --global AzureSignTool

- name: Sign executables
  run: |
    AzureSignTool sign \
      -kvu ${{ secrets.KEY_VAULT_URL }} \
      -kvc ${{ secrets.CERT_NAME }} \
      -kvt ${{ secrets.AZURE_TENANT_ID }} \
      -kvi ${{ secrets.AZURE_CLIENT_ID }} \
      -kvs ${{ secrets.AZURE_CLIENT_SECRET }} \
      -fd sha256 \
      -tr http://timestamp.digicert.com \
      -td sha256 \
      "output/*.exe"

GitLab CI

sign:
  image: mcr.microsoft.com/dotnet/sdk:8.0
  script:
    - dotnet tool install --global AzureSignTool
    - export PATH="$PATH:$HOME/.dotnet/tools"
    - AzureSignTool sign
        -kvu $KEY_VAULT_URL
        -kvc $CERT_NAME
        -kvt $AZURE_TENANT_ID
        -kvi $AZURE_CLIENT_ID
        -kvs $AZURE_CLIENT_SECRET
        -fd sha256
        -tr http://timestamp.digicert.com
        -td sha256
        "output/*.exe"

Managed identity: På Azure-hostade agenter, ersätt -kvt, -kvi och -kvs med -kvm (använd managed identity). Det eliminerar behovet av client secrets helt.

Tidsstämpling

Inkludera alltid en RFC 3161-tidsstämpel vid signering. Det säkerställer att dina signaturer förblir giltiga efter att certifikatet löper ut. Code Signing-certifikat har en maximal giltighetstid på 459 dagar, men tidsstämplade signaturer är giltiga på obestämd tid.

Rekommenderade timestamp-servrar

  • http://timestamp.digicert.com (rekommenderas, mest stabil)
  • http://timestamp.globalsign.com/tsa/r6advanced1

Felsökning

"Forbidden" eller "Access denied" vid signering

Service principal saknar Key Vault RBAC-roller. Verifiera att alla tre roller är tilldelade: Key Vault Crypto User, Key Vault Certificate User och Key Vault Secrets User. RBAC-rolltilldelningar kan ta upp till 10 minuter att propagera.

"SKU does not support HSM-backed keys"

Du skapade ett Key Vault med Standard-nivå. Du behöver Premium. Skapa ett nytt Key Vault med Premium SKU, eller uppgradera det befintliga valvet (endast möjligt via CLI).

"Certificate operation is not complete"

Du har ännu inte slagit samman det signerade certifikatet från CA:n. Gå till Key Vault → Certificates → klicka på det väntande certifikatet → Certificate Operation → Merge Signed Request.

Tidsstämpling misslyckas

Prova den alternativa timestamp-servern. Verifiera även att signeringsmaskinen har internetåtkomst och kan nå timestamp-URL:en på port 80. Vissa brandväggar blockerar utgående HTTP.

Code Signing-certifikat för Azure Key Vault

OV Code Signing

DigiCert

DigiCert CodeSign OV

OV

DigiCert OV Code Signing. Fungerar med Azure Key Vault.

från 5 300 SEK /år Se detaljer →
GlobalSign

GlobalSign CodeSign

OV

GlobalSign OV Code Signing. Fungerar med Azure Key Vault.

från 4 190 SEK /år Se detaljer →

EV Code Signing

Vanliga frågor

Hitta svar på de vanligaste frågorna om SSL-certifikat och FairSSL.

Nej. Du kan skapa ett kostnadsfritt Azure-konto och betala enbart för Key Vault-resursen (cirka 50 kr/månad för Premium). Om du redan har en Azure-prenumeration kan du skapa Key Vault där.
Nej. Standard SKU stöder enbart mjukvaruskyddade nycklar. Code Signing kräver HSM-backed nycklar (RSA-HSM), som bara finns i Premium-nivån.
Azure Key Vault använder en separat RBAC-modell för data plane-operationer. Att ha Contributor eller Owner på prenumerationen ger inte automatiskt åtkomst till nycklar och certifikat inne i valvet. Du behöver explicita Key Vault data plane-roller.
Ja. Om din signeringsprocess körs på Azure-infrastruktur (Azure DevOps hosted agents, Azure VMs, Azure Container Instances) kan du använda en managed identity för nyckelfri autentisering. Det är säkrare än client secrets.
Generera en ny CSR från samma nyckel i Key Vault, skicka in den till FairSSL för förnyelse och slå samman det nya certifikatet med den befintliga Key Vault-posten. Nyckelparet förblir detsamma, så din signeringskonfiguration ändras inte.
Ja. Du kan lagra flera certifikat i ett enda Key Vault. Varje certifikat har sitt eget nyckelpar och namn. Det är praktiskt om du har separata certifikat för olika produkter eller team.

Redo att signera från Azure Key Vault?

Skapa ett gratis konto och utfärda ditt första certifikat på under 10 minuter.