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 Bestil et Code Signing-certifikat fra FairSSL. Vælg DigiCert eller GlobalSign, OV eller EV. Se produkter nedenfor.
- 2 Indsend CSR-filen fra trin 3 under bestillingsprocessen.
- 3 Gennemfør organisationsvalidering. FairSSL håndterer valideringsprocessen.
- 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 AWSBrug AWS KMS-backend--keystoreAWS-region hvor nøglen er placeret--aliasKMS-nøglealias eller nøgle-ID--certfileSigneret certifikatfil fra CA'en (PEM-format)--tsaurlRFC 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 CodeSign OV
DigiCert OV Code Signing. Virker med AWS KMS via Jsign.
GlobalSign CodeSign
GlobalSign OV Code Signing. Virker med AWS KMS via Jsign.
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.
Klar til at signere med AWS KMS?
Opret en gratis konto og udsted dit første certifikat på under 10 minutter.