Usa il provider CNG e SignTool per firmare gli artefatti di Windows

Questa guida fornisce istruzioni per la creazione di una chiave Cloud HSM per Microsoft Firma Authenticode tramite il nostro provider CNG e SignTool.

Puoi trovare una versione del progetto basata su Terraform di questo tutorial nel Repository GitHub di kms-solutions.

Casi d'uso

Il flusso di lavoro descritto in questo documento è utile per gestire le seguenti aziende esigenze di sicurezza:

  • Firma il firmware con una chiave privata protetta da un HSM FIPS140-2 di livello 3.
  • Firma gli artefatti di Windows utilizzando lo strumento SignTool standard di Windows.

Prima di iniziare

Per completare questo tutorial, sono necessari i seguenti requisiti:

  • Un computer Windows con gli elementi che vuoi firmare.
  • L'ultima release del provider CNG di Cloud KMS, che può essere installata sulla tua macchina Windows utilizzando il programma di installazione .msi incluso.
  • Cloud Shell o la tua macchina Linux, per generare una richiesta di firma o un certificato. Su questa macchina, compila la configurazione descritta nella sezione Configurazione di OpenSSL per scaricare e configurare la nostra libreria PKCS#11.

Ricordati di eseguire gcloud auth application-default login se non l'hai ancora fatto.

Se non l'hai ancora fatto, scarica l'SDK Windows più recente sulla tua macchina Windows, che include SignTool.

Configurazione

Crea una chiave di firma ospitata da Cloud KMS

Utilizzando Cloud Shell o la tua macchina, crea un portachiavi Cloud KMS nel tuo progetto Google Cloud utilizzando il seguente comando:

gcloud kms keyrings create "KEY_RING" --location "LOCATION"

Quindi, crea una chiave di firma hardware EC-P256-SHA256 di Cloud KMS nella progetto Google Cloud, nel keyring che hai appena creato:

gcloud kms keys create "KEY_NAME" --keyring "KEY_RING" \
  --project "PROJECT_ID" --location "LOCATION" \
  --purpose "asymmetric-signing" --default-algorithm "ec-sign-p256-sha256" \
  --protection-level "hsm"

Scarica l'attestazione dell'HSM

Un'attestazione HSM è la prova che la chiave si trova in un HSM. Questa prova potrebbe essere richiesti dalla tua autorità di certificazione (CA) per emettere una convalida estesa (EV) certificato.

Per scaricare l'attestazione HSM associata alla chiave Cloud KMS: completa i seguenti passaggi:

  1. Nella console Google Cloud, vai alla pagina Gestione delle chiavi.

    Vai a Gestione delle chiavi

  2. Seleziona il keyring che contiene la chiave che vuoi attestare, quindi seleziona la chiave.

  3. Fai clic su Altro per la versione della chiave che vuoi attestare, quindi fai clic su Verifica attestazione.

  4. Nella finestra di dialogo Verifica attestazione, fai clic su Scarica bundle attestazione. Viene scaricato un file ZIP contenente l'attestazione e il certificato o encoder-decoder.

Consulta Analisi dell'attestazione per istruzioni complete su come: verificare l'attestazione scaricata.

Creare un certificato autofirmato con OpenSSL

Questo passaggio è facoltativo, ma ti consente di acquisire familiarità con le passaggi prima di completare la procedura e le spese di acquisto di un certificato firmato da un'autorità di certificazione.

Genera un certificato autofirmato utilizzando Cloud Shell o la tua macchina con la chiave di firma ospitata da Cloud KMS. Puoi utilizzare OpenSSL per utilizzare un L'URI PKCS #11 invece di un percorso file e identifica la chiave in base all'etichetta. Nella nella libreria PKCS #11 di Cloud KMS, l'etichetta della chiave equivale al Nome CryptoKey.

openssl req -new -x509 -days 3650 -subj '/CN=test/' -sha256 -engine pkcs11 \
  -keyform engine -key pkcs11:object=KEY_NAME > ca.cert

Se questo comando non riesce, PKCS11_MODULE_PATH potrebbe essere stato impostato in modo errato oppure potresti non avere le autorizzazioni corrette per utilizzare Cloud KMS chiave di firma.

Ora dovresti avere un certificato simile al seguente:

-----BEGIN CERTIFICATE-----
...
...
...
-----END CERTIFICATE-----

Copia il certificato sul tuo computer Windows in modo da poterlo utilizzare con SignTool per firmare i tuoi artefatti.

Crea una nuova richiesta di firma del certificato

Puoi generare una richiesta di firma del certificato (CSR) per un Cloud HSM chiave di firma. Completa questi passaggi se l'autorità di certificazione richiede una CSR al fine di generare un nuovo certificato per la firma del codice.

Utilizzando Cloud Shell o la tua macchina, esegui questo comando:

openssl req -new -subj '/CN=CERTIFICATE_NAME/' DIGEST_FLAG \
  -engine pkcs11 -keyform engine \
  -key pkcs11:id=KEY_ID > REQUEST_NAME.csr

Sostituisci quanto segue:

  • CERTIFICATE_NAME: un nome per il certificato che che vuoi generare.
  • DIGEST_FLAG: un flag che indica il tipo di digest. Utilizza -sha256, -sha384 o -sha512 a seconda dell'algoritmo della chiave.
  • KEY_ID: l'ID risorsa completo di un modello asimmetrico della chiave di firma, ad esempio projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/1.
  • REQUEST_NAME: un nome per la richiesta di firma del certificato.

Assicurati di utilizzare le opzioni di -sigopt corrette per il tipo di token che utilizzi che utilizzano.

Non puoi utilizzare un ID oggetto più lungo di 100 caratteri con OpenSSL. Usa versione breve Nomi KeyRing e CryptoKey oppure usa pkcs11:object=KEY_NAME. Per ulteriori informazioni sul limite di ID oggetto OpenSSL, consulta su GitHub.

Ora che hai il CSR, puoi fornirlo al tuo certificato L'autorità (CA) per ottenere il certificato di firma. Utilizza il certificato fornito dalla tua CA nella sezione successiva.

Firmare un elemento con SignTool

Ora che hai creato correttamente un certificato (autofirmato o ottenuto dall'autorità di certificazione) e l'hai copiata sul tuo computer Windows, puoi utilizzarlo per firmare un artefatto di Windows.

Usa SignTool per firmare gli artefatti, usando la tua chiave Cloud KMS e certificato.

"PATH_TO_SIGNTOOL.EXE" sign ^
  /v /debug /fd sha256 /t http://timestamp.digicert.com ^
  /f PATH_TO_CA.CERT ^
  /csp "Google Cloud KMS Provider" ^
  /kc projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/1 ^
  PATH_TO_ARTIFACT_TO_SIGN

Sostituisci quanto segue:

  • PATH_TO_SIGNTOOL.EXE: il percorso per signtool.exe (ad es. C:\\Program Files (x86)\\Windows Kits\\10\\bin\\10.0.19041.0\\x64\\signtool.exe).
  • PATH_TO_CA.CERT: il percorso del certificato ca.cert.
  • PATH_TO_ARTIFACT_TO_SIGN: il percorso dell'artefatto che vuoi firmare.

Per una spiegazione dettagliata di ogni opzione di comando e dei formati dei file degli elementi supportati, consulta la documentazione ufficiale di SignTool.