Google Cloud KMS Code Signing: opsætningsguide
Denne guide dækker opsætning af Google Cloud KMS til Code Signing. Google Cloud KMS leverer HSM-backed nøgler (FIPS 140-2 Level 3) til en lavere pris end Azure Key Vault, men kræver mere kommandolinjearbejde til CSR-generering og indledende opsætning.
Virker med både OV og EV Code Signing-certifikater fra DigiCert og GlobalSign.
Forudsætninger
- ✓ Google Cloud-projekt med fakturering aktiveret
- ✓ gcloud CLI installeret og autentificeret. Download fra cloud.google.com/sdk ↗
- ✓ OpenSSL (til CSR-generering via PKCS#11)
- ✓ Java 11+ (hvis du bruger Jsign til signering)
- ✓ Et Code Signing-certifikat fra FairSSL (DigiCert eller GlobalSign). Se produkter nedenfor
Mere teknisk end Azure Key Vault. Google Cloud KMS kræver konfiguration af PKCS#11-biblioteket og OpenSSL til CSR-generering. Hvis du er ny inden for cloud HSM og ønsker den enkleste opsætning, er Azure Key Vault lettere at komme i gang med.
Trin 1: Aktivér KMS API og opret en key ring
Aktivér Cloud KMS API i dit projekt, og opret derefter en key ring til at opbevare din signeringsnøgle.
# Enable the KMS API gcloud services enable cloudkms.googleapis.com # Create a key ring gcloud kms keyrings create codesign-keyring \ --location global
Lokationen kan være global eller en specifik region. For HSM-backed nøgler afgør lokationen,
hvilken fysisk HSM der bruges. global virker til de fleste opsætninger.
Trin 2: Opret en HSM-backed nøgle
gcloud kms keys create codesign-key \ --keyring codesign-keyring \ --location global \ --purpose asymmetric-signing \ --default-algorithm rsa-sign-pkcs1-4096-sha256 \ --protection-level hsm
Nøgleindstillinger forklaret
- purpose:
asymmetric-signing(nøglen kan signere, men ikke kryptere) - algorithm:
rsa-sign-pkcs1-4096-sha256(RSA 4096-bit med SHA-256) - protection-level:
hsm(hardware-backed, FIPS 140-2 Level 3)
Den private nøgle genereres inde i HSM'en og kan aldrig eksporteres. Alle signeringsoperationer foregår på HSM-hardwaren. Dette opfylder CA/Browser Forum-kravet til nøgleopbevaring for Code Signing.
Trin 3: Tildel IAM-rettigheder
Den service account, der bruges til signering, skal have 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
Opbevar service account-nøglefilen sikkert. Denne JSON-fil giver signeringsadgang. I CI/CD bør du bruge workload identity federation eller gemme nøglen som en hemmelig variabel.
Trin 4: Generér CSR med PKCS#11
I modsætning til Azure Key Vault (som genererer CSR'en i portalen) kræver Google Cloud KMS, at du bruger PKCS#11-biblioteket og OpenSSL til at generere CSR'en.
Installér PKCS#11-biblioteket
Download Google Cloud KMS PKCS#11-biblioteket fra Cloud KMS PKCS#11-dokumentationen ↗.
Opret PKCS#11-konfigurationsfil
Opret en YAML-konfigurationsfil (f.eks. pkcs11-config.yaml):
tokens:
- key_ring: "projects/YOUR_PROJECT/locations/global/keyRings/codesign-keyring"
label: "codesign" Generér 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
Parameteren -key refererer til KMS-nøglen via PKCS#11 URI'en. CN skal matche
det firmanavn, der er registreret hos CA'en.
Tilføj Code Signing EKU til CSR'en
Opret en OpenSSL extensions-fil (f.eks. codesign.cnf) med Code Signing EKU:
[ req ] req_extensions = v3_req [ v3_req ] keyUsage = digitalSignature extendedKeyUsage = codeSigning
Tilføj derefter -config codesign.cnf til OpenSSL-kommandoen ovenfor.
Trin 5: Bestil certifikat og indsend CSR
- 1 Bestil et Code Signing-certifikat hos FairSSL. Vælg DigiCert eller GlobalSign, OV eller EV. Se produkter nedenfor.
- 2 Indsend CSR-filen (
codesign.csr) under bestillingsprocessen. - 3 Gennemfør organisationsvalidering. FairSSL håndterer valideringsprocessen.
- 4 Modtag det signerede certifikat fra CA'en.
Trin 6a: Signering med CNG-provideren (Windows)
Google leverer en Windows CNG-provider (Cryptography Next Generation), der giver native signtool.exe-understøttelse. Det lader dig bruge signtool.exe på samme måde som med et lokalt certifikatlager eller en USB-token.
Installér CNG-provideren
- Download Google Cloud KMS CNG-provideren fra Cloud KMS CNG-dokumentationen ↗
- Installér MSI-pakken
- Importér dit signerede certifikat i Windows-certifikatlageret (certutil eller MMC snap-in)
- CNG-provideren kobler certifikatet til KMS-nøglen
Signér med signtool
signtool sign /sha1 YOUR_CERT_THUMBPRINT /fd sha256 ^ /tr http://timestamp.digicert.com /td sha256 ^ "MyApplication.exe"
CNG-provideren dirigerer signeringsoperationen transparent til Google Cloud KMS. signtool.exe fungerer præcis som med en lokal nøgle.
Trin 6b: Signering med Jsign (cross-platform)
Jsign ↗ er et gratis, open source Java-baseret signeringsværktøj med native understøttelse af Google Cloud KMS. Det virker på Windows, macOS og Linux uden CNG-provideren.
Installér Jsign
Download fra ebourg.github.io/jsign ↗. Kræver Java 11 eller nyere.
Signér 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
Parameteroversigt
--storetype GOOGLECLOUDBrug Google Cloud KMS-backend--storepassIndholdet af service account JSON-nøglen--keystoreFuld KMS key ring-ressourcesti--aliasNøglenavn inden for key ring'en--certfileSigneret certifikatfil fra CA'en (PEM-format)--tsaurlRFC 3161 timestamp-server
Timestamping
Inkludér altid et RFC 3161 timestamp, når du signerer. Code Signing-certifikater har en maksimal gyldighed på 459 dage, men signerede filer med timestamp er gyldige på ubestemt tid.
Anbefalede timestamp-servere
http://timestamp.digicert.com(anbefalet)http://timestamp.globalsign.com/tsa/r6advanced1
Fejlfinding
"PKCS#11 module not found" under CSR-generering
PKCS#11-biblioteket er ikke installeret, eller OpenSSL kan ikke finde det.
Verificér biblioteksstien, og sørg for at KMS_PKCS11_CONFIG peger på den korrekte konfigurationsfil.
"Permission denied" ved signering
Din service account mangler rollen roles/cloudkms.signerVerifier på nøglen.
Verificér IAM-bindingen, og sørg for at GOOGLE_APPLICATION_CREDENTIALS peger på den korrekte service account-nøglefil.
CNG-provideren findes ikke af signtool
Google Cloud CNG-provideren er muligvis ikke installeret korrekt. Geninstallér MSI-pakken, og sørg for at certifikatet er importeret i Windows-certifikatlageret. Certifikatet skal være koblet til CNG-provideren.
Jsign kan ikke autentificere
Verificér at service account-nøglens JSON er gyldig, og at din service account har signeringsrettigheder. Hvis du bruger workload identity federation, skal du kontrollere, at token exchange er konfigureret korrekt.
Code Signing-certifikater
OV Code Signing
DigiCert CodeSign OV
DigiCert OV Code Signing. Virker med Google Cloud KMS.
GlobalSign CodeSign
GlobalSign OV Code Signing. Virker med Google Cloud KMS.
EV Code Signing
Ofte stillede spørgsmål om Google Cloud KMS Code Signing
Find svar på de mest almindelige spørgsmål om SSL certifikater og FairSSL.
Klar til at signere med Google Cloud KMS?
Opret en gratis konto og udsted dit første certifikat på under 10 minutter.