設定 OpenSSL 以手動包裝金鑰

您必須先使用 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 安裝位置不同的位置。

  1. 請從 https://www.openssl.org/source 下載 OpenSSL 1.1.0l 版本的原始碼。這是 1.1.0 程式碼行中的最新版本。請勿在這個程序中使用較新的 OpenSSL 版本,例如 1.1.1。修補程式將無法套用。

  2. 使用下列指令,將封存檔案解壓縮至 ${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
    
  3. 使用下列指令,將自訂修補程式套用至已擷取的 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
    

  4. 執行下列指令,從已修補的來源建構 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 安裝作業。

  5. 執行下列指令,檢查新的 OpenSSL 二進位檔是否安裝成功:

    test -x ${HOME}/local/bin/openssl || echo FAIL
    

    如果二進位檔已正確安裝,您應該不會看到任何輸出內容。如果看到 FAIL,請檢查先前執行的 makemake testmake install 指令的輸出內容。

  6. 經修補的 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
    

  7. 使用下列指令,確認指令碼啟動的 OpenSSL 版本,是否為您剛建構及安裝的版本:

    ${HOME}/local/bin/openssl.sh version
    

您現在可以叫用 ${HOME}/local/bin/openssl.sh 包裝函式指令碼,手動包裝匯入金鑰