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 AWS KMS: installationsguide

Guiden beskriver hur du konfigurerar AWS KMS för kodsignering. AWS KMS ger HSM-skyddade nycklar (FIPS 140-2 Level 3 sedan maj 2023) till en låg månadskostnad, men du behöver Jsign för att signera och ett hjälpverktyg för att skapa CSR.

Fungerar med OV- och EV-certifikat för kodsignering från DigiCert och GlobalSign.

När passar AWS KMS för kodsignering?

AWS KMS passar om din organisation redan använder AWS och vill ha signeringsnycklarna i AWS. Installationen är mer krävande än för Azure Key Vault, och du måste signera med Jsign eftersom signtool.exe inte stöds.

AWS KMS (~10 kr/månad)

  • ✓ RSA 4096, FIPS 140-2 Level 3
  • ✓ Låg kostnad, du betalar per användning
  • – Bara Jsign (inte signtool.exe)
  • – CSR kräver ett hjälpverktyg

AWS CloudHSM (~150 000 kr/år)

  • ✓ Fullt stöd för PKCS#11 och signtool.exe
  • ✓ Dedikerad HSM-hårdvara
  • – Orimligt dyrt
  • – Lönar sig bara om ni redan har HSM-infrastruktur

Guiden handlar om AWS KMS, det billigare av de två alternativen. Behöver du signtool.exe och använder inte redan AWS är Azure Key Vault enklare.

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älpverktyget som skapar CSR)
  • ✓
    Ett kodsigneringscertifikat 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

Anteckna KeyId från svaret. Du behöver det i alla fö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 kodsignering)
  • Key usage: SIGN_VERIFY (bara signering, inte kryptering)
  • Skydd: Alla nycklar i AWS KMS skyddas av HSM (FIPS 140-2 Level 3 sedan maj 2023)

Den privata nyckeln lämnar aldrig HSM. AWS KMS stöder inte export av nycklar, och all signering sker i HSM.

Steg 2: Konfigurera IAM-behörigheter

Skapa en IAM-användare eller IAM-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 att skapa CSR behöver du även kms:GetPublicKey. För själva signeringen räcker kms:Sign.

Steg 3: Skapa CSR

AWS KMS kan inte skapa en CSR själv, till skillnad från Azure Key Vault. Du behöver ett hjälpverktyg som hämtar den offentliga nyckeln från KMS och skapar en korrekt formaterad CSR.

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

Ett litet verktyg skrivet i Go som skapar en CSR signerad med 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 och OpenSSL

Hämta den offentliga 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 krånglig eftersom CSR:en måste signeras med den privata nyckeln, vilket kräver ett anrop till kms:Sign med CSR:ens TBS-data (to-be-signed). Hjälpverktygen sköter det åt dig.

Steg 4: Beställ certifikat och skicka in CSR

Ordningen skiljer sig mellan DigiCert och GlobalSign

DigiCert: CSR:en måste finnas klar innan ordern kan skapas. Den lämnas in som en del av beställningen.

GlobalSign: ordern skapas utan CSR. Organisationsvalideringen genomförs först, och CSR:en lämnas in efteråt via den utfärdandelänk GlobalSign skickar till godkännarens e-post.

I båda fallen ska en tekniskt ansvarig underteckna ett intyg om att den privata nyckeln har skapats och lagras i en HSM och inte kan exporteras.

  1. 1
    Beställ ett kodsigneringscertifikat från FairSSL. Välj DigiCert eller GlobalSign, OV eller EV. Se produkter nedan.
  2. 2
    Skicka in CSR-filen från steg 3, vid beställningen (DigiCert) eller via utfärdandelänken (GlobalSign).
  3. 3
    Genomför organisationsvalideringen. FairSSL hjälper er genom valideringen.
  4. 4
    Ta emot det utfärdade 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 signeringsverktyg som används för kodsignering med AWS KMS. Det är gratis, har öppen källkod och fungerar på Windows, macOS och Linux. Kräver Java 11 eller senare.

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

Parametrar

  • --storetype AWS Använd AWS KMS som nyckellager
  • --keystore AWS-region där nyckeln finns
  • --alias Alias eller nyckel-ID för KMS-nyckeln
  • --certfile Certifikatet från CA:n (PEM-format)
  • --tsaurl RFC 3161-tidsstämpelserver

Jsign autentiserar på samma sätt som andra AWS-verktyg: via miljövariabler (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY), AWS CLI-konfigurationen, instance profiles eller ECS task roles.

Integration i CI/CD

Jsign kan köras i alla CI/CD-pipelines där Java finns installerat. Lagra AWS-inloggningsuppgifterna som hemliga pipelinevariabler, eller använd IAM-roller för autentisering utan nycklar.

Exempel för GitHub Actions

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

Signering i Docker

I pipelines som körs i containrar kan du använda en Docker-image där Java och Jsign redan är installerade:

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

Lägg alltid till en RFC 3161-tidsstämpel när du signerar. Kodsigneringscertifikat är giltiga i högst 460 dagar, men tidsstämplade signaturer förblir giltiga även efter att certifikatet har gått ut.

Rekommenderade tidsstämpelservrar

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

Felsökning

"AccessDeniedException" vid signering

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

"InvalidKeyUsageException"

KMS-nyckeln skapades med key usage ENCRYPT_DECRYPT i stället för SIGN_VERIFY. Skapa en ny nyckel med rätt key usage, eftersom key usage inte kan ändras när nyckeln väl har skapats.

Det går inte att skapa CSR

Kontrollera att IAM-användaren har behörigheten kms:GetPublicKey, att key spec är RSA_4096 och att regionen stämmer.

Jsign rapporterar "no provider for storetype AWS"

AWS KMS stöds från Jsign 5.0. Ladda ner den senaste versionen från Jsigns webbplats och se till att AWS SDK-beroendena finns på classpath.

Kodsigneringscertifikat

OV Code Signing

DigiCert

DigiCert CodeSign OV

OV

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

från 5 300 SEK 4 180 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 om kodsignering med AWS KMS

Hitta svar på de vanligaste frågorna om SSL-certifikat och FairSSL.

Google Cloud KMS har en CNG-provider för Windows, men AWS KMS har ingen kryptografisk provider för Windows. Du behöver Jsign, som anropar API:et i AWS KMS direkt. Det fungerar bra i CI/CD-pipelines men är krångligare vid manuell signering.
Själva nyckeln kostar mindre (cirka 10 kr/månad mot 50 kr/månad), men installationen är mer komplicerad och du behöver Jsign, som kräver Java. Använder du redan AWS är KMS ett rimligt val. Bygger du upp något nytt är Azure Key Vault enklare och stöder fler signeringsverktyg.
AWS CloudHSM kostar cirka 150 000 kr/år och har fullt stöd för PKCS#11 och därmed signtool.exe. Det lönar sig bara för organisationer som redan har CloudHSM. Annars är AWS KMS det naturliga valet på AWS.
Ja. AWS KMS stöder HSM-skyddade RSA 4096-nycklar (FIPS 140-2 Level 3 sedan maj 2023), vilket uppfyller kraven för både OV- och EV-certifikat för kodsignering.
Ett hjälpverktyg som skapar en certifikatsigneringsförfrågan (CSR) med en nyckel som ligger i AWS KMS. AWS KMS kan inte skapa en CSR själv. Verktyget hämtar den offentliga nyckeln från KMS och skapar en korrekt formaterad CSR.

Redo att signera med AWS KMS?

Skapa ett gratis konto och beställ ditt första certifikat. Ett DV-certifikat utfärdas på under 2 minuter.