您必須先使用 PKCS#11
CKM_RSA_AES_KEY_WRAP
配置包裝金鑰,才能將金鑰匯入 Cloud KMS。此配置包含 RSA-OAEP
(預設包含在 OpenSSL 1.1 中) 和 AES 金鑰包裝 (不包含填充)。但 OpenSSL 不包含這項機制。
建議您在匯入期間使用 Google Cloud CLI 自動包裝每個金鑰。如果您必須基於法規或法規要求手動包裝金鑰,則必須先重新編譯 OpenSSL,才能新增 AES 金鑰包裝 (含填充) 支援功能。重新編譯 OpenSSL 後,您可以手動包裝金鑰。
事前準備
請勿使用本主題所述的修補二進位檔,覆寫系統內建的 OpenSSL 二進位檔。舉例來說,請勿將已修補的 OpenSSL 直接安裝至 /usr
。如果您確實按照這個程序操作,則會在 $HOME/build
中建構已修補的 OpenSSL,並安裝至 $HOME/local/bin
。
如果 ${HOME}/local/bin
已存在,請先備份其內容或將這些檔案移至其他位置,再按照本主題中的步驟操作。
修補及安裝 OpenSSL v1.1.0
如果您選擇使用 OpenSSL 手動包裝金鑰,再將金鑰匯入 Cloud KMS,則必須使用 OpenSSL 1.1.0 版,並套用下列修補程式。您必須編譯 OpenSSL,並將其安裝至與系統預設 OpenSSL 安裝位置不同的位置。
請從 https://www.openssl.org/source 下載 OpenSSL 1.1.0l 版本的原始碼。這是 1.1.0 程式碼行中的最新版本。請勿在這個程序中使用較新的 OpenSSL 版本,例如 1.1.1。修補程式將無法套用。
使用下列指令,將封存檔案解壓縮至
${HOME}/build/openssl/
。這個指令會覆寫預設目錄,其中包含 OpenSSL 版本,且經常變更。將 /path/to/downloaded-openssl.tar.gz 替換為下載的.tar.gz
封存檔路徑。# 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
使用下列指令,將自訂修補程式套用至已擷取的 OpenSSL 來源。此修補程式會啟用
EVP_CIPHER_CTX_FLAG_WRAP_ALLOW
標記。cd ${HOME}/build cat <<-EOF | patch -d . -p0 --- orig/openssl/apps/enc.c 2020-01-17 14:39:54.991708785 -0500 +++ openssl/apps/enc.c 2020-01-17 14:41:33.215704269 -0500 @@ -482,6 +482,7 @@ */ BIO_get_cipher_ctx(benc, &ctx); + EVP_CIPHER_CTX_set_flags(ctx, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW); if (!EVP_CipherInit_ex(ctx, cipher, NULL, NULL, NULL, enc)) { BIO_printf(bio_err, "Error setting cipher %s\n", EOF
執行下列指令,從已修補的來源建構 OpenSSL 二進位檔和程式庫、測試建構作業的有效性,然後將二進位檔和程式庫安裝到
${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
請勿省略或修改
--prefix
或--openssldir
標記,以免覆寫系統的 OpenSSL 安裝作業。執行下列指令,檢查新的 OpenSSL 二進位檔是否安裝成功:
test -x ${HOME}/local/bin/openssl || echo FAIL
如果二進位檔已正確安裝,您應該不會看到任何輸出內容。如果看到
FAIL
,請檢查先前執行的make
、make test
和make install
指令的輸出內容。經修補的 OpenSSL 二進位檔會動態連結至
${HOME}/local/ssl/lib/
中的 OpenSSL 程式庫,但ld
指令預設不會為這些程式庫建立索引。執行下列指令,建立包裝函式指令碼,在為已修補的 OpenSSL 叫用 CLI 之前,將已修補的程式庫新增至${LD_LIBRARY_PATH}
。cat > ${HOME}/local/bin/openssl.sh <<-EOF #!/bin/bash env LD_LIBRARY_PATH=${HOME}/local/lib/ ${HOME}/local/bin/openssl "\$@" EOF chmod u+x ${HOME}/local/bin/openssl.sh
使用下列指令,確認指令碼啟動的 OpenSSL 版本,是否為您剛建構及安裝的版本:
${HOME}/local/bin/openssl.sh version
您現在可以叫用 ${HOME}/local/bin/openssl.sh
包裝函式指令碼,手動包裝匯入金鑰。