Questa guida fornisce istruzioni per creare una chiave Cloud HSM per la firma Microsoft Authenticode tramite PKCS#11 e Jsign.
Casi d'uso
Il flusso di lavoro descritto in questo documento consente di soddisfare le seguenti esigenze di sicurezza aziendale:
- Firma il firmware con una chiave privata protetta da un modulo HSM FIPS140-2 di livello 3.
- Firma gli artefatti di Windows senza dover utilizzare signtool.
Prima di iniziare
Per completare questo tutorial, devi disporre di quanto segue:
- Un computer Windows con gli artefatti che vuoi firmare. Assicurati che Java sia installato su questo computer.
Cloud Shell o la tua macchina Linux, per generare una richiesta di firma del certificato o un certificato. Su questa macchina, completa la configurazione documentata in Configurazione di OpenSSL.
Ricorda di eseguire gcloud auth application-default login se non l'hai ancora fatto.
Sul computer Windows, scarica l'ultimo file JAR della release di Jsign utilizzando il seguente comando PowerShell:
wget https://github.com/ebourg/jsign/releases/download/JSIGN.VERSION/jsign-JSIGN.VERSION.jar -O jsign.jar
Configurazione
Crea una chiave di firma ospitata da Cloud KMS
Utilizzando Cloud Shell o la tua macchina, crea un keyring Cloud KMS nel tuo progetto Google Cloud utilizzando questo comando:
gcloud kms keyrings create "KEY_RING" --location "LOCATION"
Poi, crea una chiave di firma hardware EC-P256-SHA256 Cloud KMS nel tuo
progettoGoogle 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 HSM
Un'attestazione HSM è la prova che la chiave si trova in un HSM. Questa prova potrebbe essere richiesta dalla tua autorità di certificazione (CA) per emettere un certificato Extended Validation (EV).
Per scaricare l'attestazione HSM associata alla chiave Cloud KMS, completa i seguenti passaggi:
Nella console Google Cloud , vai alla pagina Key Management.
Seleziona le chiavi automatizzate contenenti la chiave che vuoi attestare, quindi seleziona la chiave.
Fai clic su Altro more_vert per la versione della chiave che vuoi attestare, poi fai clic su Verifica attestazione.
Nella finestra di dialogo Verifica attestazione, fai clic su Scarica pacchetto di attestazione. Viene scaricato un file ZIP contenente le catene di attestazioni e certificati.
Consulta la sezione Analisi dell'attestazione per istruzioni complete su come verificare l'attestazione scaricata.
Crea un certificato autofirmato con OpenSSL
Questo passaggio è facoltativo, ma ti aiuta a familiarizzare con i passaggi successivi prima di procedere con la procedura e la spesa per l'acquisto di un certificato firmato da un'autorità di certificazione.
Utilizzando Cloud Shell o la tua macchina, genera un certificato autofirmato con la chiave di firma ospitata da Cloud KMS. Puoi utilizzare OpenSSL per utilizzare un URI PKCS #11 anziché un percorso file e identificare la chiave in base alla sua etichetta. Nella libreria PKCS #11 di Cloud KMS, l'etichetta della chiave equivale al nome di 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 va a buon fine, PKCS11_MODULE_PATH potrebbe essere stato impostato in modo errato oppure potresti non disporre delle autorizzazioni corrette per utilizzare la chiave di firma Cloud KMS.
Ora dovresti avere un certificato simile a questo:
-----BEGIN CERTIFICATE-----
...
...
...
-----END CERTIFICATE-----
Copia il certificato sul computer Windows in modo da poterlo utilizzare con Jsign per firmare gli artefatti.
Crea una nuova richiesta di firma del certificato
Puoi generare una richiesta di firma del certificato (CSR) per una chiave di firma Cloud HSM. Completa questi passaggi se la tua autorità di certificazione richiede un CSR per 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 vuoi generare.DIGEST_FLAG: un flag che indica il tipo di digest. Utilizza-sha256,-sha384o-sha512a seconda dell'algoritmo della chiave.KEY_ID: l'ID risorsa completo di una versione della chiave di firma asimmetrica, ad esempioprojects/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 -sigopt corrette per il tipo di chiave che stai
utilizzando.
Ora che hai la CSR, puoi fornirla alla tua autorità di certificazione per ottenere il certificato di firma. Utilizza il certificato fornito dalla tua CA nella sezione successiva.
Firma un artefatto con Jsign
Ora che hai creato correttamente un certificato (autofirmato o ottenuto dall'autorità di certificazione) e lo hai copiato sul tuo computer Windows, puoi utilizzarlo per firmare un artefatto Windows.
Per un elenco dei formati file supportati, esegui il comando jsign --help.
Utilizza Jsign per firmare gli artefatti utilizzando la chiave Cloud KMS e il certificato.
java -jar PATH_TO_JSIGN.JAR --storetype GOOGLECLOUD \
--storepass $(gcloud auth application-default print-access-token) \
--keystore projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING \
--alias KEY_NAME \
--certfile PATH_TO_CA.CERT
PATH_TO_ARTIFACT_TO_SIGN
Sostituisci quanto segue:
PATH_TO_JSIGN.JAR: il percorso dijsign.jar.PATH_TO_CA.CERT: il percorso del certificatoca.cert.PATH_TO_ARTIFACT_TO_SIGN: il percorso dell'artefatto che vuoi firmare.
Per una spiegazione dettagliata di ogni opzione del comando, consulta la documentazione di Jsign ufficiale.