SSL-certifikatens maximala livslängd reduceras till 200 dagar från mars 2026. Läs mer →

AWS KMS Code Signing: installationsguide

Den här guiden beskriver hur du konfigurerar AWS KMS för Code Signing. AWS KMS tillhandahåller HSM-backed nycklar (FIPS 140-2 Level 3 sedan maj 2023) till en låg månadskostnad, men kräver Jsign för signering och hjälpverktyg för CSR-generering.

Fungerar med både OV och EV Code Signing-certifikat från DigiCert och GlobalSign.

När ska du använda AWS KMS för Code Signing

AWS KMS är ett bra val om din organisation redan har investerat i AWS-infrastruktur och du vill behålla dina signeringsnycklar inom AWS-ekosystemet. Installationen är mer krävande än Azure Key Vault, och signering kräver Jsign (inget inbyggt stöd för signtool.exe).

AWS KMS (~10 kr/månad)

  • RSA 4096, FIPS 140-2 Level 3
  • Låg kostnad, betala per användning
  • Endast Jsign (inget signtool.exe)
  • CSR kräver hjälpverktyg

AWS CloudHSM (~150 000 kr/år)

  • Fullt PKCS#11 + signtool.exe-stöd
  • Dedikerad HSM-hårdvara
  • Orimligt dyrt
  • Bara praktiskt med befintlig HSM-infrastruktur

Den här guiden täcker AWS KMS (det prisvärda alternativet). Om du behöver signtool.exe-stöd och inte redan använder AWS är Azure Key Vault den enklare och bättre vägen.

Förutsättningar

  • AWS-konto med behörighet att skapa KMS-nycklar
  • AWS CLI v2 installerat och konfigurerat. Ladda ner från aws.amazon.com/cli ↗
  • Java 11+ (för Jsign)
  • Go eller Python (för hjälpverktyg vid CSR-generering)
  • Ett Code Signing-certifikat från FairSSL (DigiCert eller GlobalSign). Se produkter nedan

Steg 1: Skapa en asymmetrisk KMS-nyckel

aws kms create-key \
  --key-spec RSA_4096 \
  --key-usage SIGN_VERIFY \
  --description "Code Signing key" \
  --tags TagKey=Purpose,TagValue=CodeSigning

Notera KeyId från svaret. Du behöver det för alla efterföljande kommandon.

# Create an alias for easier reference
aws kms create-alias \
  --alias-name alias/codesign \
  --target-key-id YOUR_KEY_ID

Nyckelinställningar

  • Key spec: RSA_4096 (krävs för Code Signing)
  • Key usage: SIGN_VERIFY (enbart signering, inte kryptering)
  • Skydd: Alla AWS KMS-nycklar är HSM-backed (FIPS 140-2 Level 3 sedan maj 2023)

Den privata nyckeln lämnar aldrig HSM:en. AWS KMS stöder inte nyckelexport. Alla signeringsoperationer utförs inuti HSM:en.

Steg 2: Konfigurera IAM-behörigheter

Skapa en IAM-användare eller -roll för din signeringspipeline med behörighet att använda KMS-nyckeln.

Minsta IAM-policy

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:Sign",
        "kms:GetPublicKey",
        "kms:DescribeKey"
      ],
      "Resource": "arn:aws:kms:REGION:ACCOUNT:key/YOUR_KEY_ID"
    }
  ]
}

För CSR-generering behöver du även kms:GetPublicKey. För själva signeringssteget räcker kms:Sign.

Steg 3: Generera CSR

AWS KMS har ingen inbyggd CSR-genereringsfunktion (till skillnad från Azure Key Vault). Du behöver ett hjälpverktyg som hämtar den publika nyckeln från KMS och skapar en korrekt formaterad CSR.

Alternativ A: aws-kms-sign-csr (Go)

Ett lättviktigt Go-verktyg som genererar en CSR signerad av KMS-nyckeln.

# Install
go install github.com/AdrianHenworthy/aws-kms-sign-csr@latest

# Generate CSR
aws-kms-sign-csr \
  --key-id alias/codesign \
  --subject "CN=Your Company Name" \
  --out codesign.csr

Alternativ B: Manuellt med AWS CLI + OpenSSL

Hämta den publika nyckeln från KMS och skapa en CSR manuellt:

# Get the public key
aws kms get-public-key \
  --key-id alias/codesign \
  --output text \
  --query PublicKey | base64 --decode > public-key.der

# Convert to PEM
openssl rsa -pubin -inform DER -in public-key.der -out public-key.pem

# Create CSR (requires signing via KMS, not straightforward)
# The aws-kms-sign-csr tool handles this automatically

Den manuella metoden är komplex eftersom själva CSR:en måste signeras av den privata nyckeln, vilket kräver att man anropar kms:Sign på CSR:ens TBS-data (to-be-signed). De dedikerade verktygen hanterar detta korrekt.

Steg 4: Beställ certifikat och skicka in CSR

  1. 1
    Beställ ett Code Signing-certifikat från FairSSL. Välj DigiCert eller GlobalSign, OV eller EV. Se produkter nedan.
  2. 2
    Skicka in CSR-filen från steg 3 under beställningsprocessen.
  3. 3
    Genomför organisationsvalidering. FairSSL hanterar valideringsprocessen.
  4. 4
    Ta emot det signerade certifikatet från CA:n. Spara det som en PEM-fil (t.ex. codesign-cert.pem).

Steg 5: Installera Jsign och signera

Jsign ↗ är det primära signeringsverktyget för AWS KMS Code Signing. Det är gratis, open source och fungerar på Windows, macOS och Linux. Kräver Java 11+.

Signera med Jsign

jsign --storetype AWS \
  --keystore "eu-west-1" \
  --alias "alias/codesign" \
  --certfile codesign-cert.pem \
  --tsaurl http://timestamp.digicert.com \
  --tsmode RFC3161 \
  MyApplication.exe

Parameterreferens

  • --storetype AWS Använd AWS KMS-backend
  • --keystore AWS-region där nyckeln finns
  • --alias KMS-nyckelalias eller nyckel-ID
  • --certfile Signerat certifikat från CA:n (PEM-format)
  • --tsaurl RFC 3161-tidsstämpelserver

Jsign använder den vanliga AWS-autentiseringskedjan: miljövariabler (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY), AWS CLI-konfiguration, instance profiles eller ECS task roles.

CI/CD-integration

Jsign kan köras i vilken CI/CD-pipeline som helst med Java installerat. Lagra dina AWS-uppgifter som hemliga pipelinevariabler eller använd IAM-roller för nyckellös autentisering.

GitHub Actions-exempel

- name: Configure AWS credentials
  uses: aws-actions/configure-aws-credentials@v4
  with:
    aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
    aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
    aws-region: eu-west-1

- name: Sign executable
  run: |
    jsign --storetype AWS \
      --keystore eu-west-1 \
      --alias alias/codesign \
      --certfile codesign-cert.pem \
      --tsaurl http://timestamp.digicert.com \
      --tsmode RFC3161 \
      "output/MyApplication.exe"

Docker-baserad signering

För containeriserade pipelines kan du använda en Docker-image med Java och Jsign förinstallerat:

FROM eclipse-temurin:17-jre
RUN curl -sL https://github.com/ebourg/jsign/releases/download/6.0/jsign-6.0.jar \
    -o /usr/local/lib/jsign.jar
ENTRYPOINT ["java", "-jar", "/usr/local/lib/jsign.jar"]

Tidsstämpling

Inkludera alltid en RFC 3161-tidsstämpel vid signering. Code Signing-certifikat har en maximal giltighetstid på 459 dagar, men tidsstämplade signaturer är giltiga på obestämd tid.

Rekommenderade tidsstämpelservrar

  • http://timestamp.digicert.com (rekommenderas)
  • http://timestamp.globalsign.com/tsa/r6advanced1

Felsökning

"AccessDeniedException" vid signering

IAM-användaren/-rollen saknar kms:Sign-behörighet på nyckeln. Kontrollera IAM-policyn och se till att den pekar på rätt nyckel-ARN.

"InvalidKeyUsageException"

KMS-nyckeln skapades med ENCRYPT_DECRYPT-användning istället för SIGN_VERIFY. Du behöver skapa en ny nyckel med rätt key usage. KMS key usage kan inte ändras efter att nyckeln skapats.

CSR-generering misslyckas

Kontrollera att IAM-användaren har kms:GetPublicKey-behörighet. Kontrollera även att key spec är RSA_4096 och att regionen är korrekt.

Jsign rapporterar "no provider for storetype AWS"

Du behöver Jsign version 5.0 eller senare för AWS KMS-stöd. Ladda ner den senaste versionen från Jsigns webbplats. Se till att AWS SDK-beroendena finns tillgängliga på classpath.

Code Signing-certifikat

OV Code Signing

DigiCert

DigiCert CodeSign OV

OV

DigiCert OV Code Signing. Fungerar med AWS KMS via Jsign.

från 5 300 SEK /år Se detaljer →
GlobalSign

GlobalSign CodeSign

OV

GlobalSign OV Code Signing. Fungerar med AWS KMS via Jsign.

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.

Till skillnad från Google Cloud KMS (som har en Windows CNG-provider) tillhandahåller AWS KMS ingen inbyggd kryptografisk Windows-provider. Du behöver Jsign, som anropar AWS KMS API direkt. Det fungerar bra i CI/CD-pipelines men är mindre smidigt för manuell signering.
Den rena nyckelkostnaden är lägre (cirka 10 kr/månad mot 50 kr/månad), men installationen är mer komplex och du behöver Jsign (Java-beroende). Om du redan använder AWS är KMS ett rimligt val. För nya uppsättningar är Azure Key Vault enklare och har bättre verktyg.
AWS CloudHSM kostar cirka 150 000 kr/år och ger fullt PKCS#11-stöd (inbyggt signtool.exe). Det är bara praktiskt för organisationer som redan har CloudHSM-infrastruktur. För de flesta användare är AWS KMS det bättre valet på AWS.
Ja. AWS KMS stöder RSA 4096 HSM-backed nycklar (FIPS 140-2 Level 3 sedan maj 2023), vilket uppfyller kraven för både OV och EV Code Signing-certifikat.
Det är ett hjälpverktyg som genererar en Certificate Signing Request (CSR) med en nyckel som lagras i AWS KMS. AWS KMS har ingen inbyggd CSR-genereringsfunktion, så detta verktyg överbryggar den luckan. Det hämtar den publika nyckeln från KMS och skapar en korrekt formaterad CSR.

Redo att signera med AWS KMS?

Skapa ett gratis konto och utfärda ditt första certifikat på under 10 minuter.