SSL-certifikaternes maksimale levetid reduceres til 200 dage fra marts 2026. Læs mere →

AWS KMS Code Signing: opsætningsguide

Denne guide dækker opsætning af AWS KMS til Code Signing. AWS KMS leverer HSM-backed nøgler (FIPS 140-2 Level 3 siden maj 2023) til en lav månedlig pris, men kræver Jsign til signering og hjælpeværktøjer til CSR-generering.

Virker med både OV og EV Code Signing-certifikater fra DigiCert og GlobalSign.

Hvornår man bør bruge AWS KMS til Code Signing

AWS KMS er et godt valg, hvis din organisation allerede er investeret i AWS-infrastruktur, og du vil beholde dine signeringsnøgler inden for AWS-økosystemet. Opsætningen er mere involveret end Azure Key Vault, og signering kræver Jsign (ingen native signtool.exe-understøttelse).

AWS KMS (ca. 10 kr./måned)

  • RSA 4096, FIPS 140-2 Level 3
  • Lav pris, betal pr. brug
  • Kun Jsign (ingen signtool.exe)
  • CSR kræver hjælpeværktøjer

AWS CloudHSM (ca. 100.000 kr./år)

  • Fuld PKCS#11 + signtool.exe-understøttelse
  • Dedikeret HSM-hardware
  • Uforholdsmæssigt dyrt
  • Kun praktisk med eksisterende HSM-infrastruktur

Denne guide dækker AWS KMS (den overkommelige mulighed). Hvis du har brug for signtool.exe-understøttelse og ikke allerede er på AWS, er Azure Key Vault den nemmere og bedre understøttede vej.

Forudsætninger

  • AWS-konto med rettigheder til at oprette KMS-nøgler
  • AWS CLI v2 installeret og konfigureret. Download fra aws.amazon.com/cli ↗
  • Java 11+ (til Jsign)
  • Go eller Python (til CSR-genereringsværktøjer)
  • Et Code Signing-certifikat fra FairSSL (DigiCert eller GlobalSign). Se produkter nedenfor

Trin 1: Opret en asymmetrisk KMS-nøgle

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

Notér KeyId fra svaret. Du skal bruge det i alle efterfølgende kommandoer.

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

Nøgleindstillinger

  • Key spec: RSA_4096 (påkrævet til Code Signing)
  • Key usage: SIGN_VERIFY (kun signering, ikke kryptering)
  • Beskyttelse: Alle AWS KMS-nøgler er HSM-backed (FIPS 140-2 Level 3 siden maj 2023)

Den private nøgle forlader aldrig HSM'en. AWS KMS understøtter ikke eksport af nøgler. Alle signeringsoperationer udføres inde i HSM'en.

Trin 2: Konfigurér IAM-rettigheder

Opret en IAM-bruger eller -rolle til din signeringspipeline med rettigheder til at bruge KMS-nøglen.

Minimum 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"
    }
  ]
}

Til CSR-generering har du også brug for kms:GetPublicKey. Til selve signeringstrinnet er kms:Sign tilstrækkelig.

Trin 3: Generér CSR

AWS KMS har ikke en indbygget CSR-genereringsfunktion (i modsætning til Azure Key Vault). Du har brug for et hjælpeværktøj, der udtrækker den offentlige nøgle fra KMS og opretter en korrekt formateret CSR.

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

Et letvægts Go-værktøj, der genererer en CSR signeret af KMS-nøglen.

# 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

Mulighed B: Manuelt med AWS CLI + OpenSSL

Udtræk den offentlige nøgle fra KMS og opret en CSR manuelt:

# 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 manuelle tilgang er kompleks, fordi selve CSR'en skal signeres af den private nøgle, hvilket kræver et kald til kms:Sign på CSR'ens TBS (to-be-signed) data. De dedikerede værktøjer håndterer dette korrekt.

Trin 4: Bestil certifikat og indsend CSR

  1. 1
    Bestil et Code Signing-certifikat fra FairSSL. Vælg DigiCert eller GlobalSign, OV eller EV. Se produkter nedenfor.
  2. 2
    Indsend CSR-filen fra trin 3 under bestillingsprocessen.
  3. 3
    Gennemfør organisationsvalidering. FairSSL håndterer valideringsprocessen.
  4. 4
    Modtag det signerede certifikat fra CA'en. Gem det som en PEM-fil (f.eks. codesign-cert.pem).

Trin 5: Installér Jsign og signér

Jsign ↗ er det primære signeringsværktøj til AWS KMS Code Signing. Det er gratis, open source og virker på Windows, macOS og Linux. Kræver Java 11+.

Signér 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

Parameteroversigt

  • --storetype AWS Brug AWS KMS-backend
  • --keystore AWS-region hvor nøglen er placeret
  • --alias KMS-nøglealias eller nøgle-ID
  • --certfile Signeret certifikatfil fra CA'en (PEM-format)
  • --tsaurl RFC 3161 timestamp-server

Jsign bruger den standard AWS credential chain: miljøvariabler (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY), AWS CLI-konfiguration, instance profiles eller ECS task roles.

CI/CD-integration

Jsign kører i enhver CI/CD-pipeline med Java installeret. Gem dine AWS-credentials som hemmelige pipeline-variabler eller brug IAM-roller til nøglefri autentificering.

GitHub Actions-eksempel

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

Til containeriserede pipelines kan du bruge et Docker-image med Java og Jsign forudinstalleret:

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

Tidsstempling

Inkludér altid et RFC 3161-tidsstempel ved signering. Code Signing-certifikater har en maksimal gyldighed på 459 dage, men tidsstemplede signaturer er gyldige på ubestemt tid.

Anbefalede timestamp-servere

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

Fejlfinding

"AccessDeniedException" ved signering

IAM-brugeren/-rollen mangler kms:Sign-rettighed på nøglen. Kontrollér IAM-policyen og sørg for, at den peger på den korrekte nøgle-ARN.

"InvalidKeyUsageException"

KMS-nøglen blev oprettet med ENCRYPT_DECRYPT-brug i stedet for SIGN_VERIFY. Du skal oprette en ny nøgle med det korrekte key usage. KMS key usage kan ikke ændres efter oprettelse.

CSR-generering fejler

Kontrollér at IAM-brugeren har kms:GetPublicKey-rettighed. Tjek også at key spec er RSA_4096, og at regionen er korrekt.

Jsign rapporterer "no provider for storetype AWS"

Du skal bruge Jsign version 5.0 eller nyere for AWS KMS-understøttelse. Download den nyeste version fra Jsigns hjemmeside. Sørg for, at AWS SDK-afhængighederne er tilgængelige på classpath.

Code Signing-certifikater

OV Code Signing

DigiCert

DigiCert CodeSign OV

OV

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

fra 3.550 DKK /år Se detaljer →
GlobalSign

GlobalSign CodeSign

OV

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

fra 2.800 DKK /år Se detaljer →

EV Code Signing

Ofte stillede spørgsmål om AWS KMS Code Signing

Find svar på de mest almindelige spørgsmål om SSL certifikater og FairSSL.

I modsætning til Google Cloud KMS (som har en Windows CNG-provider) leverer AWS KMS ikke en native Windows-kryptografiprovider. Du skal bruge Jsign, som kalder AWS KMS API direkte. Det fungerer godt i CI/CD-pipelines, men er mindre bekvemt til manuel signering.
Den rene nøglepris er lavere (ca. 10 kr./måned vs ca. 35 kr./måned), men opsætningen er mere kompleks, og du har brug for Jsign (Java-afhængighed). Hvis du allerede er på AWS, er KMS et fornuftigt valg. Til nye opsætninger er Azure Key Vault enklere og har bedre værktøjsunderstøttelse.
AWS CloudHSM koster ca. 100.000 kr./år og giver fuld PKCS#11-understøttelse (native signtool.exe). Det er kun praktisk for organisationer med eksisterende CloudHSM-infrastruktur. For de fleste brugere er AWS KMS det bedre valg på AWS.
Ja. AWS KMS understøtter RSA 4096 HSM-backed nøgler (FIPS 140-2 Level 3 siden maj 2023), hvilket opfylder kravene til både OV og EV Code Signing-certifikater.
Det er et hjælpeværktøj, der genererer en Certificate Signing Request (CSR) med en nøgle opbevaret i AWS KMS. AWS KMS har ikke en indbygget CSR-genereringsfunktion, så dette værktøj bygger bro over det hul. Det udtrækker den offentlige nøgle fra KMS og opretter en korrekt formateret CSR.

Klar til at signere med AWS KMS?

Opret en gratis konto og udsted dit første certifikat på under 10 minutter.