SSL-certifikat får vara giltiga i högst 199 dagar. Senast 2027-03-15 blir gränsen 99 dagar, för DigiCert-certifikat redan från 2027-02-24. Läs mer →
Svensk support på svenska, vardagar 10:00-16:00 +46 10 101 03 34 info@fairssl.se

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

  1. Skapa Key Vault, nyckel och CSR (steg 1 till 3 nedan)
  2. Skicka CSR:en till FairSSL, eller klistra in den i ordern. Ordern kan inte skapas utan CSR
  3. Organisationsvalideringen genomförs och HSM-intyget undertecknas
  4. Certifikatet utfärdas och skickas till dig. Slå ihop det i Key Vault (steg 5)

GlobalSign: validering först, CSR efteråt

  1. Ordern skapas utan CSR
  2. Organisationsvalideringen genomförs och HSM-intyget undertecknas
  3. När valideringen är godkänd skickar GlobalSign en utfärdandelänk via e-post
  4. 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
  5. 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
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 och Key Size 4096
Advanced Policy Configuration med de inställningar som ska användas. Fältet Certificate Type är valfritt och har ingen betydelse för en non-integrated 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

  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-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

  • -kvu Key Vault-URL (står på valvets ö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 Värdet för din client secret
  • -fd Hashalgoritm för filen (använd alltid sha256)
  • -tr URL till en RFC 3161-tidsstämpelserver
  • -td Hashalgoritm för tidsstämpeln (använd alltid sha256)

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

DigiCert CodeSign OV

OV

DigiCert OV Code Signing. Fungerar med Azure Key Vault.

från 5 300 SEK 4 180 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.

Det beror på CA:n. Hos DigiCert måste CSR:en vara klar innan ordern skapas, eftersom den lämnas in med beställningen. Hos GlobalSign genomförs organisationsvalideringen först, och CSR:en lämnas in efteråt via den utfärdandelänk som GlobalSign skickar när valideringen är godkänd. Om du är osäker på vilken CA din order gäller, fråga FairSSL.
Välj 12 månader. Kodsigneringscertifikat från FairSSL utfärdas med ett års giltighet. Köper du 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, men det är inte den giltighet du får. Fältet i Azure styr bara Key Vaults egen policy, inte giltigheten på det certifikat CA:n utfärdar.
Nej. Du kan skapa ett kostnadsfritt Azure-konto och betala bara för Key Vault-resursen (cirka 50 kr/månad för Premium). Har du redan en Azure-prenumeration kan du skapa valvet där.
Nej. Standard stöder bara programvaruskyddade nycklar. Kodsignering kräver HSM-skyddade nycklar (RSA-HSM), som bara finns på nivån Premium.
Azure Key Vault har en separat RBAC-modell för åtgärder i dataplanet. Rollen Contributor eller Owner på prenumerationen ger inte automatiskt åtkomst till nycklar och certifikat i valvet. Du måste uttryckligen tilldelas Key Vault-roller för dataplanet.
Ja. Om signeringen körs på Azure-infrastruktur (Azure DevOps hosted agents, virtuella Azure-datorer, Azure Container Instances) kan du använda en managed identity och slippa lagra en hemlighet. Det är säkrare än en client secret.
Gå till certifikatet i Key Vault och välj New Version. Med Reuse Key on Renewal satt till Yes återanvänds den befintliga HSM-nyckeln, så du får en ny CSR på samma nyckelpar. Lämna in CSR:en till FairSSL, eller via GlobalSigns utfärdandelänk om förnyelsen ligger där, och slå ihop det nya certifikatet med Merge Signed Request. Nyckeln och certifikatnamnet är oförändrade, så din signeringskonfiguration behöver inte ändras.
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 beställ ditt första certifikat. Ett DV-certifikat utfärdas på under 2 minuter.