Kodsignering med Google Cloud KMS: installationsguide
Den här guiden beskriver hur du konfigurerar Google Cloud KMS för kodsignering. Google Cloud KMS ger HSM-skyddade nycklar (FIPS 140-2 Level 3) till lägre kostnad än Azure Key Vault, men kräver mer arbete på kommandoraden för att generera CSR:en och göra grundkonfigurationen.
Fungerar med kodsigneringscertifikat på både OV- och EV-nivå från DigiCert och GlobalSign.
Förutsättningar
- ✓ Google Cloud-projekt med fakturering aktiverad
- ✓ gcloud CLI installerat och autentiserat. Ladda ner från cloud.google.com/sdk ↗
- ✓ OpenSSL (för CSR-generering via PKCS#11)
- ✓ Java 11+ (om du använder Jsign för signering)
- ✓ Ett kodsigneringscertifikat från FairSSL (DigiCert eller GlobalSign). Se produkterna nedan
Mer tekniskt än Azure Key Vault. Med Google Cloud KMS måste du konfigurera PKCS#11-biblioteket och OpenSSL för att generera CSR:en. Om du inte har arbetat med HSM i molnet tidigare och vill ha så få steg som möjligt är Azure Key Vault lättare att komma igång med.
Steg 1: Aktivera KMS API och skapa en key ring
Aktivera Cloud KMS API i projektet och skapa sedan en key ring som ska innehålla signeringsnyckeln.
# Enable the KMS API gcloud services enable cloudkms.googleapis.com # Create a key ring gcloud kms keyrings create codesign-keyring \ --location global
Platsen kan vara global eller en specifik region. För HSM-skyddade nycklar avgör platsen
vilken fysisk HSM som används. Välj en region om nyckeln måste ligga i ett visst område, annars fungerar global.
Steg 2: Skapa en HSM-skyddad nyckel
gcloud kms keys create codesign-key \ --keyring codesign-keyring \ --location global \ --purpose asymmetric-signing \ --default-algorithm rsa-sign-pkcs1-4096-sha256 \ --protection-level hsm
Nyckelinställningarna förklarade
- purpose:
asymmetric-signing(nyckeln kan signera men inte kryptera) - algorithm:
rsa-sign-pkcs1-4096-sha256(RSA 4096 bitar med SHA-256) - protection-level:
hsm(hårdvaruskyddad, FIPS 140-2 Level 3)
Den privata nyckeln genereras i HSM:en och kan inte exporteras. Alla signeringsoperationer utförs i HSM:en. Det uppfyller CA/Browser Forums krav på nyckellagring för kodsignering.
Steg 3: Tilldela IAM-behörigheter
Tjänstekontot som används för signering behöver rollen Cloud KMS CryptoKey Signer.
# Create a service account for signing gcloud iam service-accounts create codesign-signer \ --display-name "Code Signing Service Account" # Grant signing permission on the key gcloud kms keys add-iam-policy-binding codesign-key \ --keyring codesign-keyring \ --location global \ --member "serviceAccount:codesign-signer@YOUR_PROJECT.iam.gserviceaccount.com" \ --role "roles/cloudkms.signerVerifier" # Create a service account key file (for use outside GCP) gcloud iam service-accounts keys create ~/codesign-sa-key.json \ --iam-account codesign-signer@YOUR_PROJECT.iam.gserviceaccount.com
Förvara tjänstekontots nyckelfil säkert. JSON-filen ger behörighet att signera. I CI/CD bör du använda workload identity federation eller lagra nyckeln som en hemlig variabel.
Steg 4: Generera CSR med PKCS#11
Till skillnad från Azure Key Vault (som genererar CSR:en i portalen) kräver Google Cloud KMS att du använder PKCS#11-biblioteket och OpenSSL för att generera CSR:en.
Installera PKCS#11-biblioteket
Ladda ner PKCS#11-biblioteket för Google Cloud KMS från Cloud KMS PKCS#11-dokumentationen ↗.
Skapa en konfigurationsfil för PKCS#11
Skapa en YAML-konfigurationsfil (t.ex. pkcs11-config.yaml):
tokens:
- key_ring: "projects/YOUR_PROJECT/locations/global/keyRings/codesign-keyring"
label: "codesign" Generera CSR:en med OpenSSL
# Set environment variables export KMS_PKCS11_CONFIG=./pkcs11-config.yaml export GOOGLE_APPLICATION_CREDENTIALS=~/codesign-sa-key.json # Generate CSR openssl req -new \ -subj "/CN=Your Company Name" \ -sha256 \ -engine pkcs11 \ -keyform engine \ -key "pkcs11:object=codesign-key;type=private" \ -out codesign.csr
Parametern -key pekar på KMS-nyckeln med en PKCS#11-URI. CN måste stämma med
företagsnamnet som är registrerat hos CA:n.
Lägg till EKU för kodsignering i CSR:en
Skapa en OpenSSL-konfigurationsfil med tilläggen (t.ex. codesign.cnf) så att CSR:en får EKU för kodsignering:
[ req ] req_extensions = v3_req [ v3_req ] keyUsage = digitalSignature extendedKeyUsage = codeSigning
Lägg sedan till -config codesign.cnf i OpenSSL-kommandot ovan.
Steg 5: Beställ certifikat och skicka in CSR
Ordningen skiljer sig mellan DigiCert och GlobalSign
DigiCert: CSR:en måste vara klar innan beställningen kan skapas. Den lämnas in som en del av beställningen.
GlobalSign: beställningen skapas utan CSR. Organisationsvalideringen genomförs först, och CSR:en lämnas in efteråt via den länk för utfärdande som GlobalSign skickar till godkännarens e-postadress.
I båda fallen ska en tekniskt ansvarig underteckna ett intyg om att den privata nyckeln är genererad och lagras i en HSM och inte kan exporteras.
- 1 Beställ ett kodsigneringscertifikat hos FairSSL. Välj DigiCert eller GlobalSign, OV eller EV. Se produkterna nedan.
- 2 Skicka in CSR-filen (
codesign.csr) när du beställer. - 3 Genomför organisationsvalideringen. FairSSL hanterar valideringen.
- 4 Ta emot det signerade certifikatet från CA:n.
Steg 6a: Signera med CNG-providern (Windows)
Google har en CNG-provider (Cryptography Next Generation) för Windows som ger inbyggt stöd för signtool.exe. Du använder signtool.exe på samma sätt som med ett lokalt certifikatlager eller en USB-token.
Installera CNG-providern
- Ladda ner CNG-providern för Google Cloud KMS från Cloud KMS CNG-dokumentationen ↗
- Installera MSI-paketet
- Importera det signerade certifikatet till certifikatlagret i Windows (med certutil eller MMC-snapin)
- CNG-providern kopplar certifikatet till KMS-nyckeln
Signera med signtool
signtool sign /sha1 YOUR_CERT_THUMBPRINT /fd sha256 ^ /tr http://timestamp.digicert.com /td sha256 ^ "MyApplication.exe"
CNG-providern skickar signeringsoperationen vidare till Google Cloud KMS utan att du märker det. signtool.exe fungerar som med en lokal nyckel.
Steg 6b: Signera med Jsign (plattformsoberoende)
Jsign ↗ är ett kostnadsfritt Java-baserat signeringsverktyg med öppen källkod och inbyggt stöd för Google Cloud KMS. Det fungerar i Windows, macOS och Linux utan CNG-providern.
Installera Jsign
Ladda ner från ebourg.github.io/jsign ↗. Kräver Java 11 eller senare.
Signera med Jsign
jsign --storetype GOOGLECLOUD \ --storepass "$(cat ~/codesign-sa-key.json)" \ --keystore "projects/YOUR_PROJECT/locations/global/keyRings/codesign-keyring" \ --alias "codesign-key" \ --certfile codesign-cert.pem \ --tsaurl http://timestamp.digicert.com \ --tsmode RFC3161 \ MyApplication.exe
Parametrarna
--storetype GOOGLECLOUDAnvänd Google Cloud KMS som nyckellager--storepassInnehållet i tjänstekontots JSON-nyckel--keystoreFullständig resurssökväg till key ring i KMS--aliasNyckelns namn i key ring--certfileDet signerade certifikatet från CA:n (PEM-format)--tsaurlTidsstämpelserver enligt RFC 3161
Tidsstämpling
Lägg alltid till en tidsstämpel enligt RFC 3161 när du signerar. Kodsigneringscertifikat har en giltighetstid på 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(rekommenderad)http://timestamp.globalsign.com/tsa/r6advanced1
Felsökning
"PKCS#11 module not found" vid CSR-generering
PKCS#11-biblioteket är inte installerat, eller så hittar OpenSSL det inte.
Kontrollera sökvägen till biblioteket och att KMS_PKCS11_CONFIG pekar på rätt konfigurationsfil.
"Permission denied" vid signering
Tjänstekontot saknar rollen roles/cloudkms.signerVerifier på nyckeln.
Kontrollera IAM-bindningen och att GOOGLE_APPLICATION_CREDENTIALS pekar på rätt nyckelfil för tjänstekontot.
signtool hittar inte CNG-providern
CNG-providern från Google Cloud kan vara felaktigt installerad. Installera om MSI-paketet och kontrollera att certifikatet är importerat till certifikatlagret i Windows. Certifikatet måste vara kopplat till CNG-providern.
Jsign kan inte autentisera sig
Kontrollera att JSON-nyckeln för tjänstekontot är giltig och att tjänstekontot har behörighet att signera. Om du använder workload identity federation ska du kontrollera att tokenutbytet är rätt konfigurerat.
Kodsigneringscertifikat
OV Code Signing
DigiCert CodeSign OV
DigiCert OV Code Signing. Fungerar med Google Cloud KMS.
GlobalSign CodeSign
GlobalSign OV Code Signing. Fungerar med Google Cloud KMS.
EV Code Signing
Vanliga frågor om kodsignering med Google Cloud KMS
Hitta svar på de vanligaste frågorna om SSL-certifikat och FairSSL.
Redo att signera med Google Cloud KMS?
Skapa ett gratis konto och beställ ditt första certifikat. Ett DV-certifikat utfärdas på under 2 minuter.