Questa guida fornisce istruzioni per la creazione di una chiave Cloud HSM per Microsoft Firma Authenticode tramite PKCS#11 e Jsign.
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 elementi di Windows senza dover utilizzare Signtool.
Prima di iniziare
Per completare questo tutorial, sono necessari i seguenti requisiti:
- Un computer Windows con gli elementi che vuoi firmare. Assicurati che Java è installato su questa macchina.
Cloud Shell o la tua macchina Linux, per generare una richiesta di firma o un certificato. Su questa macchina, completa la configurazione descritta in Configurazione di OpenSSL.
Ricordati di eseguire gcloud auth application-default login
se non l'hai ancora fatto.
Sul tuo computer Windows, scarica la versione più recente di JAR di 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
Crea un Cloud KMS utilizzando Cloud Shell o la tua macchina il keyring del 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
Cloud KMS nel
tuo 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:
Nella console Google Cloud, vai alla pagina Gestione delle chiavi.
Seleziona il keyring che contiene la chiave che vuoi attestare, quindi seleziona la chiave.
Fai clic su Altro more_vert per la versione della chiave che vuoi attestare e poi su Verifica attestazione.
Nella finestra di dialogo Verifica attestazione, fai clic su Scarica bundle di 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 biblioteca PKCS #11 di Cloud KMS, l'etichetta della chiave è equivalente al nome della chiave 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 sulla tua macchina Windows in modo da poterlo utilizzare con Jsign per firmare gli elementi.
Creare 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 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 le funzionalità di-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 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 di -sigopt
corrette per il tipo di token che utilizzi
che utilizzano.
Ora che hai il CSR, puoi fornirlo al tuo certificato L'autorità (CA) per ottenere il certificato di firma. Utilizza il certificato fornito dalla CA nella prossima sezione.
Firma un artefatto con Jsign
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.
Per un elenco dei formati file supportati, esegui il comando jsign --help
.
Usa Jsign per firmare gli artefatti, la tua chiave Cloud KMS e 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 ciascuna opzione di comando, consulta il Documentazione di Jsign.