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 Operation → Download 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 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 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 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 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 Operation → Merge 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
- Gå till Azure Active Directory → App registrations → New registration
- Ge den ett beskrivande namn (t.ex. "CodeSign-Pipeline")
- Notera Application (client) ID och Directory (tenant) ID
- 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
-kvuKey Vault URL (finns på Key Vaults översiktssida)-kvcCertifikatnamn i Key Vault (namnet du valde i steg 3)-kvtAzure tenant (directory) ID-kviApplication (client) ID för din service principal-kvsClient secret-värde-fdFile digest-algoritm (använd alltidsha256)-trRFC 3161 timestamp server URL-tdTimestamp digest-algoritm (använd alltidsha256)
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 CodeSign OV
DigiCert OV Code Signing. Fungerar med Azure Key Vault.
GlobalSign CodeSign
GlobalSign OV Code Signing. Fungerar med Azure Key Vault.
EV Code Signing
Vanliga frågor
Hitta svar på de vanligaste frågorna om SSL-certifikat och FairSSL.
Redo att signera från Azure Key Vault?
Skapa ett gratis konto och utfärda ditt första certifikat på under 10 minuter.