Configurar OpenSSL para encapsular claves manualmente
Organízate con las colecciones
Guarda y clasifica el contenido según tus preferencias.
Antes de importar una clave en Cloud KMS, debe encapsularse con el esquema PKCS#11CKM_RSA_AES_KEY_WRAP, que incluye tanto RSA-OAEP (que se incluye en OpenSSL 1.1 de forma predeterminada) como AES Key Wrap with Padding (que no se incluye). Ese mecanismo no está incluido en OpenSSL.
Te recomendamos que uses la CLI de Google Cloud para envolver cada clave automáticamente durante la importación. Si debes encapsular tus claves manualmente debido a requisitos de cumplimiento o normativos, primero debes volver a compilar OpenSSL para añadir compatibilidad con el encapsulado de claves AES con relleno. Después de volver a compilar OpenSSL, puedes encapsular la clave manualmente.
Antes de empezar
No sobrescribas los archivos binarios de OpenSSL integrados en tu sistema con los archivos binarios parcheados que se producen siguiendo los procedimientos de este tema. Por ejemplo, no instales la versión parcheada de OpenSSL directamente en /usr. Si sigues este procedimiento al pie de la letra, el OpenSSL parcheado se compilará en $HOME/build y se instalará en $HOME/local/bin.
Si ${HOME}/local/bin ya existe, crea una copia de seguridad de su contenido o mueve esos archivos a otra ubicación antes de seguir los pasos de este tema.
Parchea e instala OpenSSL v1.1.0
Si decides usar OpenSSL para encapsular manualmente tus claves antes de importarlas a Cloud KMS, debes usar OpenSSL 1.1.0 con el siguiente parche aplicado. Deberás compilar OpenSSL e instalarlo en una ubicación distinta de la instalación predeterminada de OpenSSL de tu sistema.
Descarga el código fuente de la versión 1.1.0l de OpenSSL desde https://www.openssl.org/source.
Esta es la última versión de la línea de código 1.1.0. No utilices una versión más reciente de OpenSSL, como la 1.1.1, en este procedimiento. No se podrá aplicar el parche.
Extrae el archivo en ${HOME}/build/openssl/ con el siguiente comando.
Este comando anula el directorio predeterminado, que incluye la versión de OpenSSL y cambia con frecuencia. Sustituye
/path/to/downloaded-openssl.tar.gz por la ruta al archivo
.tar.gz descargado.
# 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
Aplica un parche personalizado al origen de OpenSSL extraído con los siguientes comandos.El parche habilita la marca EVP_CIPHER_CTX_FLAG_WRAP_ALLOW.
Ejecuta los siguientes comandos para compilar los archivos binarios y las bibliotecas de OpenSSL a partir de la fuente parcheada, prueba la validez de la compilación e instala los archivos binarios y las bibliotecas en el directorio ${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
No omita ni modifique las marcas --prefix o --openssldir para asegurarse de que no sobrescribe la instalación de OpenSSL del sistema.
Ejecuta el siguiente comando para comprobar que el nuevo archivo binario de OpenSSL se ha instalado correctamente:
test -x ${HOME}/local/bin/openssl || echo FAIL
Si los archivos binarios se han instalado correctamente, no deberías ver ningún resultado. Si ves
FAIL, comprueba el resultado de los comandos make, make test y make install
que has ejecutado antes.
Los binarios de OpenSSL parcheados están vinculados dinámicamente a las bibliotecas de OpenSSL en ${HOME}/local/ssl/lib/, pero el comando ld no indexa estas bibliotecas de forma predeterminada. Ejecuta los siguientes comandos para crear una secuencia de comandos envolvente que añada las bibliotecas parcheadas a ${LD_LIBRARY_PATH}
antes de invocar la CLI de OpenSSL parcheada.
[[["Es fácil de entender","easyToUnderstand","thumb-up"],["Me ofreció una solución al problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Es difícil de entender","hardToUnderstand","thumb-down"],["La información o el código de muestra no son correctos","incorrectInformationOrSampleCode","thumb-down"],["Me faltan las muestras o la información que necesito","missingTheInformationSamplesINeed","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2025-09-10 (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)."]]