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.
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.
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=Dit Firmanavn(skal matche det navn, der er registreret hos CA'en)
Avanceret 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 (ikke påkrævet til Code Signing)
Klik Create. Certifikatet vises i listen med status "In progress". Klik på det, og klik derefter Certificate Operation → Download CSR for at hente CSR-filen.
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: Bestil certifikat og indsend CSR
- 1 Bestil et Code Signing-certifikat hos FairSSL. Vælg DigiCert eller GlobalSign, OV eller EV. Vælg "Azure Key Vault" som leveringsmetode. Se produkter nedenfor.
- 2 Indsend CSR'en, du downloadede fra Azure Key Vault. Indsæt PEM-indholdet, når du bliver bedt om det under bestillingsprocessen.
- 3 Gennemfør 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.
- 4 Modtag det signerede certifikat fra CA'en. Du modtager typisk flere filer: dit Code Signing-certifikat, et intermediate-certifikat og et root-certifikat. Saml dem i én PEM-fil (se trin 5).
Trin 5: Importér det signerede certifikat i Key Vault
Vi anbefaler at samle alle certifikater i én PEM-fil: 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.
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 Operation → Merge 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
- Gå til Azure Active Directory → App registrations → New registration
- Giv den et beskrivende navn (f.eks. "CodeSign-Pipeline")
- Notér Application (client) ID og Directory (tenant) ID
- 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
-kvuKey Vault URL (findes på Key Vault-oversigtssiden)-kvcCertifikatnavn i Key Vault (det navn, du valgte i trin 3)-kvtAzure tenant (directory) ID-kviApplication (client) ID for din service principal-kvsClient secret-værdi-fdFile digest-algoritme (brug altidsha256)-trRFC 3161 timestamp-server URL-tdTimestamp digest-algoritme (brug altidsha256)
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å 459 dage, 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
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.
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 CodeSign OV
DigiCert OV Code Signing. Virker med Azure Key Vault.
GlobalSign CodeSign
GlobalSign OV Code Signing. Virker med Azure Key Vault.
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.
Klar til at signere fra Azure Key Vault?
Opret en gratis konto og udsted dit første certifikat på under 10 minutter.