Configurazione di OpenSSL per il blocco manuale delle chiavi
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Prima di poter importare una chiave in Cloud KMS, deve essere sottoposta a wrapping utilizzando lo schema CKM_RSA_AES_KEY_WRAPPKCS#11, che include sia RSA-OAEP (incluso per impostazione predefinita in OpenSSL 1.1) sia il wrapping della chiave AES con padding (non incluso). Questo meccanismo non è incluso in OpenSSL.
Ti consigliamo di utilizzare Google Cloud CLI per chiudere automaticamente ogni chiave durante l'importazione. Se devi eseguire il wrapping delle chiavi manualmente a causa di requisiti di conformità o normativi, devi prima ricompilare OpenSSL per aggiungere il supporto per il wrapping delle chiavi AES con padding. Dopo aver ricompilato OpenSSL, puoi
eseguire il wrapping della chiave manualmente.
Prima di iniziare
Non sovrascrivere i binari OpenSSL integrati del sistema con i binari con patch prodotti seguendo le procedure descritte in questo argomento. Ad esempio,
non installare OpenSSL con patch direttamente in /usr. Se segui esattamente questa procedura, OpenSSL con patch viene compilato in $HOME/build e installato in $HOME/local/bin.
Se ${HOME}/local/bin esiste già, esegui il backup dei relativi contenuti o sposta i file altrove prima di seguire i passaggi descritti in questo argomento.
Esegui la patch e installa OpenSSL 1.1.0
Se scegli di utilizzare OpenSSL per eseguire il wrapping manuale delle chiavi prima di importarle in Cloud KMS, è necessaria la versione OpenSSL 1.1.0 con la patch riportata di seguito applicata. Dovrai compilare OpenSSL e installarlo in una posizione distinta dall'installazione predefinita di OpenSSL del sistema.
Scarica il codice sorgente della release OpenSSL 1.1.0l da
https://www.openssl.org/source.
Questa è la release più recente della linea di codice 1.1.0. Non utilizzare una versione più recente di OpenSSL, ad esempio la v1.1.1, in questa procedura. L'applicazione della patch non andrà a buon fine.
Estrai l'archivio in ${HOME}/build/openssl/ utilizzando il seguente comando.
Questo comando sostituisce la directory predefinita, che include la versione di OpenSSL e cambia spesso. Sostituisci
/path/to/downloaded-openssl.tar.gz con il percorso dell'archivio
.tar.gz scaricato.
# Create the directory for the eventual OpenSSL binaries
mkdir -p ${HOME}/local/ssl
# Create the build directory
mkdir -p ${HOME}/build/openssl
# Extract the archive to ${HOME}/build/openssl
tar xzvf /path/to/downloaded-openssl.tar.gz \
-C ${HOME}/build/openssl/ \
--strip-components 1
Applica una patch personalizzata al codice sorgente di OpenSSL estratto utilizzando i seguenti comandi.La patch attiva il flag EVP_CIPHER_CTX_FLAG_WRAP_ALLOW.
Esegui i seguenti comandi per compilare i binari e le librerie OpenSSL dal codice sorgente corretto, verifica la validità della compilazione e installa i binari e le librerie nella directory ${HOME}/local.
CPUS=$(getconf _NPROCESSORS_ONLN)
cd ${HOME}/build/openssl
./config --prefix=${HOME}/local --openssldir=${HOME}/local/ssl
make -j${CPUS}
make test
make install
Non omettere o modificare i flag --prefix o --openssldir per assicurarti di non sovrascrivere l'installazione di OpenSSL del sistema.
Esegui il seguente comando per verificare che il nuovo file binario OpenSSL sia stato installato correttamente:
test -x ${HOME}/local/bin/openssl || echo FAIL
Non dovresti vedere alcun output se i file binari sono installati correttamente. Se vedi
FAIL, controlla l'output dei comandi make, make test e make install
che hai eseguito in precedenza.
I binari OpenSSL sottoposti a patch sono collegati dinamicamente alle librerie OpenSSL in ${HOME}/local/ssl/lib/, ma il comando ld non indicizza queste librerie per impostazione predefinita. Esegui i comandi riportati di seguito per creare uno script wrapper che aggiunga le librerie con patch al ${LD_LIBRARY_PATH}
prima di richiamare l'interfaccia a riga di comando per OpenSSL con patch.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Difficile da capire","hardToUnderstand","thumb-down"],["Informazioni o codice di esempio errati","incorrectInformationOrSampleCode","thumb-down"],["Mancano le informazioni o gli esempi di cui ho bisogno","missingTheInformationSamplesINeed","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2025-09-05 UTC."],[],[],null,["# Configuring OpenSSL for manual key wrapping\n\nBefore you can import a key into Cloud KMS, it must be wrapped\nusing the\n[PKCS#11](https://docs.oasis-open.org/pkcs11/pkcs11-curr/v2.40/cos01/pkcs11-curr-v2.40-cos01.html#_Toc408226908)\n`CKM_RSA_AES_KEY_WRAP` scheme, which includes both `RSA-OAEP` (which is included\nin OpenSSL 1.1 by default) and AES Key Wrap\nwith Padding (which is not). That mechanism is not included in OpenSSL.\n\nWe recommend using the Google Cloud CLI to\n[wrap each key automatically](/kms/docs/importing-a-key#request_import) during\nthe import. If you must wrap your keys manually due to compliance or regulatory\nrequirements, you must first recompile OpenSSL to add support for AES Key Wrap\nwith Padding. After recompiling OpenSSL, you can\n[wrap the key manually](/kms/docs/wrapping-a-key).\n| **Important:** If you use automatic wrapping, do not follow these steps. Instead, you need to [install the Pyca cryptographic library](/kms/docs/crypto), which works with the OpenSSL binaries already installed on your local system. The Google Cloud CLI can use that library to automatically wrap your key during the import request.\n\nBefore you begin\n----------------\n\n| **Caution:** These steps require advanced knowledge of Linux. Most users should allow the Google Cloud CLI command to [automatically wrap and import](/kms/docs/importing-a-key#automatically_wrap_and_import) keys instead of following the instructions in this topic.\n\nDo not overwrite your system's built-in OpenSSL binaries with the\npatched binaries produced by following the procedures in this topic. For example,\ndo not install the patched OpenSSL directly into `/usr`. If you follow this\nprocedure exactly, the patched OpenSSL is built in `$HOME/build` and installed\ninto `$HOME/local/bin`.\n\nIf `${HOME}/local/bin` already exists, back up its contents or move those files\nelsewhere before following the steps in this topic.\n\nPatch and install OpenSSL v1.1.0\n--------------------------------\n\nIf you choose to use OpenSSL to manually wrap your keys before importing them\ninto Cloud KMS, OpenSSL v1.1.0 is required, with the following\npatch applied. You will need to compile OpenSSL and install it into a location\nseparate from your system's default OpenSSL installation.\n\n1. Download the source for OpenSSL 1.1.0l release from\n [https://www.openssl.org/source](https://www.openssl.org/source/old/1.1.0/openssl-1.1.0l.tar.gz).\n This is the latest release in the 1.1.0 code line. Do not use a newer\n version of OpenSSL, such as v1.1.1, in this procedure. The patch will fail\n to apply.\n\n2. Extract the archive to `${HOME}/build/openssl/` using the following command.\n This command overrides the default directory, which includes the version of\n OpenSSL and changes often. Replace\n \u003cvar translate=\"no\"\u003e/path/to/downloaded-openssl.tar.gz\u003c/var\u003e with the path to the downloaded\n `.tar.gz` archive.\n\n ```\n # Create the directory for the eventual OpenSSL binaries\n mkdir -p ${HOME}/local/ssl\n\n # Create the build directory\n mkdir -p ${HOME}/build/openssl\n\n # Extract the archive to ${HOME}/build/openssl\n tar xzvf /path/to/downloaded-openssl.tar.gz \\\n -C ${HOME}/build/openssl/ \\\n --strip-components 1\n ```\n3. Apply a custom patch to the extracted OpenSSL source, using the following\n commands.The patch enables the `EVP_CIPHER_CTX_FLAG_WRAP_ALLOW` flag.\n\n | **Warning:** This patch fails to apply to versions of OpenSSL other than v1.1.0l.\n\n\n ```none\n cd ${HOME}/build\n cat \u003c\u003c-EOF | patch -d . -p0\n --- orig/openssl/apps/enc.c 2020-01-17 14:39:54.991708785 -0500\n +++ openssl/apps/enc.c 2020-01-17 14:41:33.215704269 -0500\n @@ -482,6 +482,7 @@\n */\n\n BIO_get_cipher_ctx(benc, &ctx);\n + EVP_CIPHER_CTX_set_flags(ctx, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW);\n\n if (!EVP_CipherInit_ex(ctx, cipher, NULL, NULL, NULL, enc)) {\n BIO_printf(bio_err, \"Error setting cipher %s\\n\",\n EOF\n ```\n\n \u003cbr /\u003e\n\n4. Run the following commands to build the OpenSSL binaries and libraries from\n the patched source, test the build for validity, and install the binaries\n and libraries into the `${HOME}/local` directory.\n\n ```none\n CPUS=$(getconf _NPROCESSORS_ONLN)\n cd ${HOME}/build/openssl\n ./config --prefix=${HOME}/local --openssldir=${HOME}/local/ssl\n make -j${CPUS}\n make test\n make install\n ```\n\n Do not omit or modify the `--prefix` or `--openssldir` flags, to ensure that\n you do not overwrite the system's OpenSSL installation.\n5. Run the following command to check that the new OpenSSL binary installed\n successfully:\n\n ```none\n test -x ${HOME}/local/bin/openssl || echo FAIL\n ```\n\n You should see no output if the binaries are installed correctly. If you see\n `FAIL`, check the output of the `make`, `make test`, and `make install`\n commands you ran earlier.\n6. The patched OpenSSL binaries are dynamically linked against the OpenSSL\n libraries in `${HOME}/local/ssl/lib/`, but the `ld` command does not\n index these libraries by default. Run the following commands to create a\n wrapper script that adds the patched libraries to the `${LD_LIBRARY_PATH}`\n before invoking the CLI for the patched OpenSSL.\n\n\n ```\n cat \u003e ${HOME}/local/bin/openssl.sh \u003c\u003c-EOF\n #!/bin/bash\n env LD_LIBRARY_PATH=${HOME}/local/lib/ ${HOME}/local/bin/openssl \"\\$@\"\n EOF\n chmod u+x ${HOME}/local/bin/openssl.sh\n ```\n\n \u003cbr /\u003e\n\n7. Check that the version of OpenSSL that the script starts is the version you\n just built and installed, using the following command:\n\n ```\n ${HOME}/local/bin/openssl.sh version\n ```\n\nYou can now invoke the `${HOME}/local/bin/openssl.sh` wrapper script to\n[manually wrap keys for import](/kms/docs/wrapping-a-key)."]]