Kodsignering med Azure Key Vault: installationsguide
Guiden går igenom hela konfigurationen av Azure Key Vault Premium för kodsignering, från att skapa valvet till att signera din första fil med AzureSignTool. Den gäller kodsigneringscertifikat på både OV- och EV-nivå från DigiCert och GlobalSign.
Ska du bara skapa CSR:en och installera certifikatet finns en kortare guide: Skapa CSR för kodsignering i Azure Key Vault.
Förutsättningar
- ✓ Azure-prenumeration (alla nivåer, även den kostnadsfria)
- ✓ .NET 8 SDK eller senare (för AzureSignTool). Ladda ner från dotnet.microsoft.com ↗
- ✓ Ett kodsigneringscertifikat från FairSSL (DigiCert eller GlobalSign, OV eller EV). Se produkterna nedan
Bara certifikat från DigiCert och GlobalSign fungerar med Azure Key Vault. Certifikat från Sectigo/Comodo fungerar inte, eftersom Azure Key Vault inte stöder deras format för nyckelattestering.
Viktigt: ordningen skiljer sig mellan DigiCert och GlobalSign
Konfigurationen i Azure är densamma oavsett CA, men tidpunkten då CSR:en ska lämnas in skiljer sig. Läs det avsnitt som gäller din order innan du börjar.
DigiCert: CSR:en måste vara klar först
- Skapa Key Vault, nyckel och CSR (steg 1 till 3 nedan)
- Skicka CSR:en till FairSSL, eller klistra in den i ordern. Ordern kan inte skapas utan CSR
- Organisationsvalideringen genomförs och HSM-intyget undertecknas
- Certifikatet utfärdas och skickas till dig. Slå ihop det i Key Vault (steg 5)
GlobalSign: validering först, CSR efteråt
- Ordern skapas utan CSR
- Organisationsvalideringen genomförs och HSM-intyget undertecknas
- När valideringen är godkänd skickar GlobalSign en utfärdandelänk via e-post
- Först nu behövs CSR:en. Skapa nyckel och CSR i Key Vault (steg 1 till 3) och lämna in CSR:en via länken
- Certifikatet utfärdas direkt. Slå ihop det i Key Vault (steg 5)
Ta inte bort det väntande certifikatet i Key Vault medan du väntar. Det utfärdade certifikatet kan bara slås ihop med exakt den väntande begäran som CSR:en kom från. Skapar du om certifikatet får du en ny nyckel, och det utfärdade certifikatet går inte att använda. Måste du börja om ska den nya CSR:en lämnas in.
HSM-intyg. Innan certifikatet utfärdas ska ni skriftligen intyga att den privata nyckeln har genererats och lagras i hårdvara (HSM), i det här fallet ett Azure Key Vault Premium med en RSA-HSM-nyckel, och att nyckeln inte kan exporteras. Intyget undertecknas av någon som tekniskt kan gå i god för det, normalt den som gör installationen.
Steg 1: Skapa ett Azure Key Vault (Premium)
Gå till Azure-portalen och skapa en ny Key Vault-resurs. Den inställning som avgör om det fungerar är prisnivån.
Key Vault-inställningar
- Prisnivå:
Premium(krävs för HSM-skyddade 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 (förvalt, kan inte inaktiveras)
- Purge protection: Aktivera (rekommenderas, förhindrar permanent radering av misstag)
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 har en separat behörighetsmodell för åtgärder i dataplanet. Rollen Owner eller Contributor på prenumerationen ger inte automatiskt åtkomst till nycklar och certifikat 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 signeringen)
- ✓ 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
Öppna ditt Key Vault i Azure-portalen → Certificates → Generate/Import.
Inställningar när certifikatet skapas
- Method: Generate
- Certificate Name: t.ex.
codesign-2026(din interna referens) - Type of CA: Certificate issued by a non-integrated CA
- Subject:
CN=Företagets fullständiga juridiska namn(exakt som det är registrerat, utan förkortningar, och samma namn som valideringen gäller) - Validity Period (in months):
12(se rutan om giltighet nedan) - DNS Names: inga
- Content Type: PEM
Advanced Policy Configuration
- Extended Key Usages (EKUs):
1.3.6.1.5.5.7.3.3(Code Signing). Ta bort de EKU:er som redan står där - X.509 Key Usage Flags: lämna oförändrade
- Reuse Key on Renewal: Yes (så att samma HSM-nyckel kan användas vid förnyelse)
- Exportable Private Key: No (krävs, nyckeln får inte kunna lämna HSM:en)
- Key Type: RSA-HSM (saknas alternativet är valvet inte Premium)
- Key Size: 4096
- Enable Certificate Transparency: No (Yes är tillåtet men behövs inte för kodsignering)
- Certificate Type: lämna tomt. Fältet används bara vid en integrerad CA
Giltighet: välj 12 månader. Kodsigneringscertifikat från FairSSL utfärdas med ett års giltighet. Har du köpt flera år är de följande åren förnyelser av det befintliga certifikatet, inte ett enda långt certifikat. Branschens övre gräns är 460 dagar, cirka 15 månader (DigiCert utfärdar högst 459), men det är inte den giltighet som ditt certifikat utfärdas med.
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. Du behöver rollen Key Vault Administrator för att skapa certifikatet, se steg 2.
Ska den här delen skickas vidare till den som skapar CSR:en finns den som fristående sida här: Skapa CSR för Code Signing i Azure Key Vault.
Den privata nyckeln genereras i HSM:en och lämnar den aldrig. CSR:en innehåller bara den offentliga nyckeln, och det är CSR:en du skickar till FairSSL eller CA:n för signering.
Steg 4: Lämna in CSR:en och genomför valideringen
Öppna den nedladdade CSR-filen i en textredigerare. Innehållet börjar med -----BEGIN CERTIFICATE REQUEST-----
och slutar med -----END CERTIFICATE REQUEST-----. CA:n behöver hela blocket, inklusive de två raderna.
Order hos DigiCert
CSR:en måste lämnas in innan ordern kan skapas. Klistra in PEM-texten i ordern, eller skicka filen till FairSSL på info@fairssl.se, så lägger vi in den hos DigiCert. Därefter startar organisationsvalideringen.
Order hos GlobalSign
Vänta med CSR:en. När organisationsvalideringen är genomförd och godkänd skickar GlobalSign en utfärdandelänk via e-post. CSR:en lämnas in via den länken, och certifikatet utfärdas direkt efteråt.
Organisationsvalidering
För GlobalSign gör FairSSL den inledande OV-valideringen, på danska, svenska eller engelska, och CA:n gör sedan en oberoende kontroll. Ett OV-certifikat från GlobalSign kan normalt utfärdas samma arbetsdag under kontorstid, och EV oftast en arbetsdag senare. Tiderna är inte garanterade och förutsätter att ni är lätta att nå och skickar tillbaka undertecknade dokument direkt. Valideringen sker via ett bokat samtal eller ett bekräftelsemejl. Samtidigt ska HSM-intyget undertecknas, se avsnittet om ordningen ovan.
När certifikatet är utfärdat får du normalt flera filer: ditt kodsigneringscertifikat, ett mellanliggande certifikat och ett rotcertifikat, eller en samlad .p7b-fil. Gå vidare till steg 5.
Steg 5: Importera det signerade certifikatet i Key Vault
Ladda upp hela kedjan. Det går bara att göra en gång
Det vanligaste felet är att ladda upp bara det egna certifikatet, utan de mellanliggande certifikaten. Det går inte att rätta efteråt, eftersom Merge Signed Request bara kan köras en gång på en väntande begäran.
Om det händer måste varje signering därefter göras med extra parametrar som pekar på det mellanliggande certifikatet. Tar du bort certifikatet för att ladda upp det igen med hela kedjan raderas den privata nyckeln samtidigt. Då måste hela processen göras om: ny nyckel, ny CSR och nytt utfärdande hos CA:n.
Kontrollera därför filen innan du laddar upp den. Den ska innehålla ditt eget certifikat och det mellanliggande certifikatet, med ditt eget först.
Använd antingen en samlad .p7b-fil från CA:n eller en samlad PEM-fil med alla certifikaten. I en PEM-fil ska ditt kodsigneringscertifikat komma först, sedan det mellanliggande certifikatet och sist rotcertifikatet. I den ordningen kan Azure Key Vault validera hela certifikatkedjan.
Har du fått en enda .p7b-fil kan du ladda upp den direkt under Merge Signed Request och hoppa över sammanslagningen.
Skapa den sammanslagna PEM-filen
Öppna en textredigerare och klistra in certifikaten i den här ordningen (eller använd kommandot nedan):
-----BEGIN CERTIFICATE----- (ditt kodsigneringscertifikat) -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- (mellanliggande certifikat från CA:n) -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- (rotcertifikat från CA:n) -----END CERTIFICATE-----
På kommandoraden kan du slå ihop 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 certifikatet kan användas 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 till parametern
-kvc i AzureSignTool.
Steg 6: Skapa en service principal för signering
AzureSignTool autentiserar mot Key Vault med en service principal (Azure AD app registration) eller en managed identity. Använd en service principal för CI/CD-pipelines som körs utanför Azure.
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-rollerna till din service principal
Gå till ditt Key Vault → Access control (IAM) → Add role assignment. Tilldela alla tre rollerna 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} Förvara din client secret säkert. Använd hemliga pipelinevariabler eller ett valv i CI/CD-pipelines, och checka aldrig in hemligheter i Git eller någon annan versionshantering.
Steg 7: Installera AzureSignTool
AzureSignTool ↗ är ett kostnadsfritt verktyg med öppen källkod som ersätter signtool.exe och 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 (plattformsoberoende)
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-skript, Office-makron och Java/Android-appar (tillsammans med 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 passar om du inte har .NET installerat eller om du signerar från macOS eller 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 (står på valvets översiktssida)-kvcCertifikatnamn i Key Vault (namnet du valde i steg 3)-kvtAzure tenant (directory) ID-kviApplication (client) ID för din service principal-kvsVärdet för din client secret-fdHashalgoritm för filen (använd alltidsha256)-trURL till en RFC 3161-tidsstämpelserver-tdHashalgoritm för tidsstämpeln (använd alltidsha256)
Verifiera signaturen
signtool verify /pa /v "MyApplication.exe"
Utdata ska visa "Successfully verified" med ditt företagsnamn och en giltig tidsstämpel.
CI/CD-integration
AzureSignTool fungerar i alla CI/CD-pipelines som kan köra .NET. Lagra inloggningsuppgifterna till Key Vault 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å agenter som körs i Azure ersätter du -kvt, -kvi och -kvs
med -kvm (använd managed identity). Då behövs ingen client secret alls.
Tidsstämpling
Lägg alltid till en RFC 3161-tidsstämpel när du signerar. Med en tidsstämpel förblir signaturen giltig även efter att certifikatet har gått ut. Kodsigneringscertifikat har en giltighetstid på högst 460 dagar, cirka 15 månader, medan tidsstämplade signaturer gäller utan tidsgräns.
Rekommenderade tidsstämpelservrar
http://timestamp.digicert.com(rekommenderas, mest stabil)http://timestamp.globalsign.com/tsa/r6advanced1
Kan du bara välja en rekommenderar vi DigiCerts server, som historiskt har varit den mest stabila. Se DigiCerts guide om problem med tidsstämpling ↗.
Bakåtkompatibilitet med äldre system
Ska signaturen valideras på äldre system kan du importera CA-certifikatet "GlobalSign Code Signing Root R45 (R3 cross)". Det finns på GlobalSigns översikt över mellanliggande certifikat ↗.
Felsökning
"Forbidden" eller "Access denied" vid signering
Din service principal saknar Key Vault-rollerna i RBAC. Kontrollera att alla tre rollerna är tilldelade: Key Vault Crypto User, Key Vault Certificate User och Key Vault Secrets User. Det kan ta upp till 10 minuter innan nya rolltilldelningar börjar gälla.
"SKU does not support HSM-backed keys"
Valvet är skapat på nivån Standard, och du behöver Premium. Skapa ett nytt Key Vault på nivån Premium, eller uppgradera det befintliga valvet (går bara 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.
Merge Signed Request misslyckas
Antingen matchar certifikatet inte den väntande begäran, eller så är kedjan ofullständig. Kontrollera att certifikatet är utfärdat på exakt den CSR som Key Vault genererade, att det väntande certifikatet inte tagits bort eller skapats om, och att filen innehåller både ditt certifikat och det mellanliggande certifikatet i rätt ordning.
CA:n avvisar CSR:en
Oftast beror det på att CN i Subject inte är identiskt med det juridiska namn som valideringen gäller, eller på att nyckeln inte är en 4096-bitars RSA-nyckel. Skapa ett nytt certifikat i Key Vault med ett annat namn och rätt fält, och lämna in den nya CSR:en. Ta inte bort det felaktiga certifikatet: soft delete håller namnet upptaget under kvarhållningsperioden, och med purge protection kan namnet inte frigöras innan perioden har löpt ut.
Tidsstämpling misslyckas
Prova den andra tidsstämpelservern. Kontrollera också att signeringsmaskinen har internetåtkomst och når tidsstämpelserverns URL på port 80. En brandvägg som blockerar utgående HTTP stoppar tidsstämplingen.
Kodsigneringscertifikat 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 beställ ditt första certifikat. Ett DV-certifikat utfärdas på under 2 minuter.