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 Beställ ett Code Signing-certifikat från FairSSL. Välj DigiCert eller GlobalSign, OV eller EV. Se produkter nedan.
- 2 Skicka in CSR-filen från steg 3 under beställningsprocessen.
- 3 Genomför organisationsvalidering. FairSSL hanterar valideringsprocessen.
- 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 AWSAnvänd AWS KMS-backend--keystoreAWS-region där nyckeln finns--aliasKMS-nyckelalias eller nyckel-ID--certfileSignerat certifikat från CA:n (PEM-format)--tsaurlRFC 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 CodeSign OV
DigiCert OV Code Signing. Fungerar med AWS KMS via Jsign.
GlobalSign CodeSign
GlobalSign OV Code Signing. Fungerar med AWS KMS via Jsign.
EV Code Signing
Vanliga frågor
Hitta svar på de vanligaste frågorna om SSL-certifikat och FairSSL.
Redo att signera med AWS KMS?
Skapa ett gratis konto och utfärda ditt första certifikat på under 10 minuter.