SSL-certifikaternes maksimale levetid reduceres til 200 dage fra marts 2026. Læs mere →

Azure Key Vault Code Signing: opsætningsguide

Denne guide fører dig gennem opsætningen af Azure Key Vault Premium til Code Signing, fra oprettelse af vault til signering af din første fil med AzureSignTool. Virker med både OV og EV Code Signing-certifikater fra DigiCert og GlobalSign.

Skal du kun oprette CSR'en og få certifikatet installeret, er der en kortere vejledning her: Opret CSR til Code Signing i Azure Key Vault.

Forudsætninger

  • Azure-abonnement (ethvert niveau, inkl. gratis)
  • .NET 8 SDK eller nyere (til AzureSignTool). Download fra dotnet.microsoft.com ↗
  • Et Code Signing-certifikat fra FairSSL (DigiCert eller GlobalSign, OV eller EV). Se produkter nedenfor

Kun DigiCert og GlobalSign certifikater virker med Azure Key Vault. Sectigo/Comodo-certifikater er ikke kompatible, fordi Azure Key Vault ikke understøtter deres key attestation-format.

Vigtigt: rækkefølgen er forskellig hos DigiCert og GlobalSign

Selve opsætningen i Azure er den samme uanset CA. Men tidspunktet, hvor CSR'en skal bruges, er ikke det samme. Læs det afsnit, der passer til din ordre, før du går i gang.

DigiCert: CSR'en skal være klar først

  1. Opret Key Vault, nøgle og CSR (trin 1 til 3 herunder)
  2. Send CSR'en til FairSSL, eller indsæt den i ordren. Ordren kan ikke oprettes uden CSR
  3. Organisationsvalidering gennemføres, og HSM-erklæringen underskrives
  4. Certifikatet udstedes og sendes til dig. Flet det ind i Key Vault (trin 5)

GlobalSign: validering først, CSR bagefter

  1. Ordren oprettes uden CSR
  2. Organisationsvalidering gennemføres, og HSM-erklæringen underskrives
  3. Når valideringen er godkendt, sender GlobalSign et udstedelseslink på e-mail
  4. Først dér skal CSR'en bruges. Opret nøgle og CSR i Key Vault (trin 1 til 3) og indsend CSR'en via linket
  5. Certifikatet udstedes med det samme. Flet det ind i Key Vault (trin 5)

Slet ikke det ventende certifikat i Key Vault, mens du venter. Det udstedte certifikat kan kun flettes ind i præcis den ventende anmodning, CSR'en kom fra. Opretter du certifikatet forfra, får du en ny nøgle, og det udstedte certifikat kan ikke bruges. Skal du starte forfra, skal CSR'en indsendes igen.

HSM-erklæring. Før certifikatet udstedes, skal I bekræfte med underskrift, at den private nøgle er genereret og opbevares i en fysisk sikring (HSM), her en Azure Key Vault Premium med RSA-HSM-nøgle, og at nøglen ikke kan eksporteres. Erklæringen skal underskrives af en, der teknisk kan stå inde for det, typisk den person, der udfører installationen.

Trin 1: Opret en Azure Key Vault (Premium)

Gå til Azure-portalen og opret en ny Key Vault-ressource. Den afgørende indstilling er prisniveauet.

Key Vault-indstillinger

  • Prisniveau: Premium (påkrævet for HSM-backed nøgler. Standard kan ikke oprette RSA-HSM-nøgler)
  • Region: Vælg en region tæt på din signeringsinfrastruktur
  • Tilladelsesmodel: Azure role-based access control (RBAC) (anbefalet)
  • Soft-delete: Aktiveret (standard, kan ikke deaktiveres)
  • Purge protection: Anbefales at aktivere (forhindrer utilsigtet permanent sletning)

Azure CLI-alternativ

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

Trin 2: Konfigurér RBAC-tilladelser

Azure Key Vault bruger en separat tilladelsesmodel til data plane-operationer. At have Owner eller Contributor på abonnementet giver ikke automatisk adgang til nøgler og certifikater inde i vault'en.

Påkrævede roller til din brugerkonto (opsætning)

  • Key Vault Administrator på Key Vault-ressourcen

Tildel via: Key Vault-ressource → Access control (IAM) → Add role assignment → Key Vault Administrator → vælg din bruger.

Påkrævede roller til AzureSignTool (signering)

Den service principal eller managed identity, som AzureSignTool bruger, skal have disse tre roller:

  • Key Vault Crypto User (udfør signeringsoperationer)
  • Key Vault Certificate User (læs certifikatmetadata)
  • Key Vault Secrets User (læs certifikatkæde)

Azure CLI

# Tildel Key Vault Administrator til dig selv
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}

Trin 3: Generér nøgle og CSR

Navigér i Azure-portalen til din Key Vault → Certificates → Generate/Import.

Certifikatoprettelsesindstillinger

  • Method: Generate
  • Certificate Name: f.eks. codesign-2026 (din interne reference)
  • Type of CA: Certificate issued by a non-integrated CA
  • Subject: CN=Virksomhedens fulde juridiske navn (præcis som registreret i CVR, uden forkortelser. Navnet skal matche det, valideringen er gennemført på)
  • Validity Period (in months): 12 (se noten om gyldighed nedenfor)
  • DNS Names: ingen
  • Content Type: PEM

Advanced Policy Configuration

  • Extended Key Usages (EKUs): 1.3.6.1.5.5.7.3.3 (Code Signing). Fjern de EKU'er, der står der i forvejen
  • X.509 Key Usage Flags: lad stå uændret
  • Reuse Key on Renewal: Yes (så fornyelse kan bruge samme HSM-nøgle)
  • Exportable Private Key: No (påkrævet. Nøglen må ikke kunne forlade HSM'en)
  • Key Type: RSA-HSM (mangler valget, er det ikke en Premium Key Vault)
  • Key Size: 4096
  • Enable Certificate Transparency: No (Yes er tilladt, men ikke nødvendigt til Code Signing)
  • Certificate Type: lad stå tomt. Feltet bruges kun ved en integreret CA
Advanced Policy Configuration i Azure Key Vault med EKU 1.3.6.1.5.5.7.3.3, Reuse Key on Renewal Yes, Exportable Private Key No, Key Type RSA-HSM og Key Size 4096
Advanced Policy Configuration med de indstillinger, der skal bruges. Certificate Type-feltet er valgfrit og har ingen betydning for en non-integrated CA.

Gyldighed: vælg 12 måneder. FairSSL udsteder Code Signing-certifikater med 1 års gyldighed. Har I købt dækning for flere år, er de efterfølgende år fornyelser af det eksisterende certifikat, ikke ét langt certifikat. Branchens loft er 460 dage, cirka 15 måneder (DigiCert udsteder 459), men det er en øvre grænse og ikke det, der bliver udstedt til jer.

Klik Create. Certifikatet vises i listen med status "In progress". Klik på det, og klik derefter Certificate OperationDownload CSR for at hente CSR-filen. Du skal have Key Vault Administrator-rettigheder for at kunne oprette certifikatet, se trin 2.

Skal denne del sendes videre til den, der laver CSR'en, findes den som selvstændig side her: Opret CSR til Code Signing i Azure Key Vault.

Den private nøgle genereres inde i HSM'en og forlader den aldrig. CSR'en indeholder kun den offentlige nøgle. Det er den, du indsender til FairSSL/CA'en til signering.

Trin 4: Aflever CSR'en og gennemfør validering

Åbn den downloadede CSR-fil i en teksteditor. Indholdet starter med -----BEGIN CERTIFICATE REQUEST----- og slutter med -----END CERTIFICATE REQUEST-----. Hele blokken, inklusive begge linjer, er det, CA'en skal bruge.

Har du en DigiCert-ordre

CSR'en skal afleveres, før ordren kan oprettes. Indsæt PEM-teksten i ordren, eller send filen til FairSSL på info@fairssl.dk, så indsætter vi den hos DigiCert. Derefter går organisationsvalideringen i gang.

Har du en GlobalSign-ordre

Vent med CSR'en. Når organisationsvalideringen er gennemført og godkendt, sender GlobalSign et udstedelseslink på e-mail. CSR'en indsendes via det link, og certifikatet udstedes med det samme bagefter.

Organisationsvalidering

FairSSL udfører den indledende OV-validering for GlobalSign på dansk, svensk og engelsk, ofte gennemført samme dag. CA'en udfører derefter en uafhængig anden kontrol. Der kan blive booket et valideringsopkald eller sendt en bekræftelses-e-mail. Samtidig skal HSM-erklæringen underskrives, se afsnittet om rækkefølge ovenfor.

Når certifikatet er udstedt, modtager du typisk flere filer: dit Code Signing-certifikat, et intermediate-certifikat og et root-certifikat, eller en samlet .p7b-fil. Gå videre til trin 5.

Trin 5: Importér det signerede certifikat i Key Vault

Upload hele kæden. Det kan kun gøres én gang

Den hyppigste fejl i hele forløbet er at uploade sit eget certifikat alene, uden intermediate-certifikaterne. Det kan ikke rettes bagefter. Merge Signed Request kan kun køres én gang på en ventende anmodning.

Sker det, skal alle signeringer derefter laves med ekstra parametre, der peger på intermediate-certifikatet. Og sletter I certifikatet for at lægge det op igen med hele kæden, bliver den private nøgle slettet sammen med det. Så skal hele forløbet startes forfra: ny nøgle, ny CSR og ny udstedelse hos CA'en.

Kontrollér derfor filen, før du uploader. Den skal indeholde jeres eget certifikat og intermediate-certifikatet, jeres eget først.

Brug enten en samlet .p7b-fil fra CA'en eller en samlet PEM-fil, der indeholder alle certifikaterne. Bruger du PEM, skal rækkefølgen være dit Code Signing-certifikat først, derefter intermediate-certifikatet og til sidst root-certifikatet. Denne rækkefølge sikrer, at Azure Key Vault kan validere hele certifikatkæden.

Har du fået en enkelt .p7b-fil, kan du uploade den direkte under Merge Signed Request og springe sammensætningen over.

Opret den samlede PEM-fil

Åbn en teksteditor og indsæt certifikaterne i denne rækkefølge (eller brug kommandoen herunder):

-----BEGIN CERTIFICATE-----
(dit Code Signing-certifikat)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(intermediate-certifikat fra CA'en)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(root-certifikat fra CA'en)
-----END CERTIFICATE-----

Med kommandolinjen kan du sammensætte filen direkte:

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

Upload til Key Vault

Gå tilbage til din Key Vault → Certificates → klik på det ventende certifikat → Certificate OperationMerge Signed Request.

Upload den samlede PEM-fil (fullchain.pem). Azure Key Vault fletter certifikatkæden med den private nøgle, der blev genereret i trin 3.

Efter fletning ændres certifikatets status til "Completed", og det er klar til signering.

Azure CLI-alternativ

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

Notér certifikatnavnet (f.eks. codesign-2026). Du skal bruge det til AzureSignTools -kvc-parameter.

Trin 6: Opret en service principal til signering

AzureSignTool autentificerer til Key Vault via en service principal (Azure AD app-registrering) eller en managed identity. Til CI/CD-pipelines på infrastruktur uden for Azure skal du bruge en service principal.

Opret app-registreringen

  1. Gå til Azure Active Directory → App registrations → New registration
  2. Giv den et beskrivende navn (f.eks. "CodeSign-Pipeline")
  3. Notér Application (client) ID og Directory (tenant) ID
  4. Gå til Certificates & secrets → New client secret → opret en secret og notér værdien

Tildel Key Vault-roller til service principal

Gå til din Key Vault → Access control (IAM) → Add role assignment. Tildel alle tre roller til din service principal:

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

Azure CLI

# Opret app-registrering
az ad app create --display-name "CodeSign-Pipeline"

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

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

# Tildel roller (gentag for hver rolle)
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}

Opbevar client secret sikkert. I CI/CD-pipelines skal du bruge hemmelige pipeline-variabler eller en vault. Commit aldrig secrets til GIT versionsstyring.

Trin 7: Installér AzureSignTool

AzureSignTool ↗ er en gratis, open source-erstatning for signtool.exe, der signerer direkte fra Azure Key Vault.

dotnet tool install --global AzureSignTool

Kræver .NET 8 SDK eller nyere. Efter installation er AzureSignTool tilgængelig som en global kommando.

Alternativ: Jsign (cross-platform)

Jsign ↗ er et Java-baseret signeringsværktøj, der også understøtter Azure Key Vault. Jsign kører på Windows, macOS og Linux, og kan signere .exe, .msi, .dll, PowerShell, Office-makroer og Java/Android-apps (som bro til 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 er et godt alternativ, hvis du ikke har .NET installeret, eller hvis du signerer fra macOS/Linux.

Trin 8: Signér din første 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"

Parameterreference

  • -kvu Key Vault URL (findes på Key Vault-oversigtssiden)
  • -kvc Certifikatnavn i Key Vault (det navn, du valgte i trin 3)
  • -kvt Azure tenant (directory) ID
  • -kvi Application (client) ID for din service principal
  • -kvs Client secret-værdi
  • -fd File digest-algoritme (brug altid sha256)
  • -tr RFC 3161 timestamp-server URL
  • -td Timestamp digest-algoritme (brug altid sha256)

Verificér signaturen

signtool verify /pa /v "MyApplication.exe"

Output bør vise "Successfully verified" med dit firmanavn og et gyldigt timestamp.

CI/CD-integration

AzureSignTool kører i enhver CI/CD-pipeline, der understøtter .NET. Gem dine Key Vault-credentials som hemmelige pipeline-variabler.

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-hostede agents kan du erstatte -kvt, -kvi og -kvs med -kvm (brug managed identity). Det eliminerer behovet for client secrets helt.

Timestamping

Inkludér altid et RFC 3161 timestamp, når du signerer. Det sikrer, at dine signaturer forbliver gyldige, efter certifikatet udløber. Code Signing-certifikater har en maksimal gyldighed på 460 dage, cirka 15 måneder, men signerede filer med timestamp er gyldige på ubestemt tid.

Anbefalede timestamp-servere

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

Kan du kun angive én, anbefaler vi DigiCerts, da den historisk har været mest stabil. Se DigiCerts vejledning om timestamping-problemer ↗.

Ekstra bagudkompatibilitet

Skal signeringen validere på ældre systemer, kan du importere CA-certifikatet "GlobalSign Code Signing Root R45 (R3 cross)". Det findes på GlobalSigns oversigt over intermediate-certifikater ↗.

Fejlfinding

"Forbidden" eller "Access denied" ved signering

Din service principal mangler Key Vault RBAC-roller. Kontrollér, at alle tre roller er tildelt: Key Vault Crypto User, Key Vault Certificate User og Key Vault Secrets User. RBAC-rolletildelinger kan tage op til 10 minutter at propagere.

"SKU does not support HSM-backed keys"

Du har oprettet en Key Vault med Standard-niveau. Du skal bruge Premium. Opret en ny Key Vault med Premium SKU, eller opgrader den eksisterende vault (kun muligt via CLI).

"Certificate operation is not complete"

Du har endnu ikke flettet det signerede certifikat fra CA'en. Gå til Key Vault → Certificates → klik på det ventende certifikat → Certificate Operation → Merge Signed Request.

Merge Signed Request fejler

Enten passer certifikatet ikke til den ventende anmodning, eller kæden er ufuldstændig. Kontrollér, at certifikatet er udstedt på præcis den CSR, Key Vault genererede, at det ventende certifikat ikke er blevet slettet eller genskabt, og at filen indeholder både dit certifikat og intermediate-certifikatet i den rigtige rækkefølge.

CA'en afviser CSR'en

Oftest fordi Subject CN ikke er identisk med det juridiske navn, valideringen er gennemført på, eller fordi nøglen ikke er 4096 bit RSA. Opret et nyt certifikat i Key Vault med et andet navn og de rigtige felter, og indsend den nye CSR. Slet ikke det forkerte certifikat: soft-delete holder navnet optaget i retention-perioden, og med purge protection kan det ikke frigives før perioden udløber.

Timestamp fejler

Prøv den alternative timestamp-server. Kontrollér også, at signeringsmaskinen har internetadgang og kan nå timestamp-URL'en på port 80. Nogle firewalls blokerer udgående HTTP.

Code Signing-certifikater til Azure Key Vault

OV Code Signing

DigiCert

DigiCert CodeSign OV

OV

DigiCert OV Code Signing. Virker med Azure Key Vault.

fra 3.550 DKK 2.990 DKK /år Se detaljer →
GlobalSign

GlobalSign CodeSign

OV

GlobalSign OV Code Signing. Virker med Azure Key Vault.

fra 2.800 DKK /år Se detaljer →

EV Code Signing

Ofte stillede spørgsmål om Azure Key Vault-opsætning

Find svar på de mest almindelige spørgsmål om SSL certifikater og FairSSL.

Det afhænger af CA'en. Hos DigiCert skal CSR'en ligge klar, før ordren oprettes, fordi CSR'en indsendes som en del af bestillingen. Hos GlobalSign gennemføres organisationsvalideringen først, og CSR'en indsendes bagefter via det udstedelseslink, GlobalSign sender, når valideringen er godkendt. Er du i tvivl om hvilken CA din ordre ligger hos, så spørg FairSSL.
Vælg 12 måneder. FairSSL udsteder Code Signing-certifikater med 1 års gyldighed. Køber I dækning for flere år, er de efterfølgende år fornyelser af det eksisterende certifikat, ikke ét langt certifikat. Branchens loft er 460 dage, cirka 15 måneder, men det er en øvre grænse og ikke det, I får udstedt. Feltet i Azure styrer kun Key Vaults egen politik, ikke den gyldighed CA'en udsteder.
Nej. Du kan oprette en gratis Azure-konto og kun betale for Key Vault-ressourcen (ca. 35 kr./måned for Premium). Hvis du allerede har et Azure-abonnement, kan du oprette Key Vault der.
Nej. Standard SKU understøtter kun softwarebeskyttede nøgler. Code Signing kræver HSM-backed nøgler (RSA-HSM), som kun er tilgængelige i Premium-niveauet.
Azure Key Vault bruger en separat RBAC-model til data plane-operationer. At have Contributor eller Owner på abonnementet giver ikke automatisk adgang til nøgler og certifikater inde i vault'en. Du skal have eksplicitte Key Vault data plane-roller.
Ja. Hvis din signeringsproces kører på Azure-infrastruktur (Azure DevOps hosted agents, Azure VM'er, Azure Container Instances), kan du bruge en managed identity til nøglefri autentificering. Det er mere sikkert end client secrets.
Gå til certifikatet i Key Vault og vælg New Version. Med Reuse Key on Renewal sat til Yes genbruges den eksisterende HSM-nøgle, så du får en ny CSR på samme nøglepar. Indsend CSR'en til FairSSL, eller via GlobalSigns udstedelseslink hvis fornyelsen ligger der, og flet det nye certifikat ind med Merge Signed Request. Nøglen og certifikatnavnet er uændret, så din signeringskonfiguration skal ikke rettes.
Ja. Du kan opbevare flere certifikater i en enkelt Key Vault. Hvert certifikat har sit eget nøglepar og navn. Det er praktisk, hvis du har separate certifikater til forskellige produkter eller teams.

Klar til at signere fra Azure Key Vault?

Opret en gratis konto og udsted dit første certifikat på under 10 minutter.