跳至內容

我該如何修補 OpenSSL,使其能與 CloudHSM 的 CKM_RSA_AES_KEY_WRAP 機制搭配使用?

2 分的閱讀內容
0

我想將 AWS CloudHSM CKM_RSA_AES_KEY_WRAP 機制與 OpenSSL 搭配使用。

簡短描述

若要使用與 RSA_AES_KEY_WRAP 機制相容的 -id-aes256-wrap-pad OpenSSL 密碼來搭配 CloudHSM PKCS #11 程式庫,請下載並安裝最新版 OpenSSL。然後,進行修補以允許 CKM_RSA_AES_KEY_WRAP 機制所需的封套封裝。

解決方法

注意:

  • 以下解決方法不會移除或更改用戶端的預設 OpenSSL 安裝。
  • 此解決方法使用 Red Hat Enterprise Linux (RHEL) Bash 命令,需使用 AWS 帳戶的根使用者。
  • 此解決方法僅適用於 OpenSSL v1.1.x。

修補 OpenSSL 以允許 CKM_RSA_AES_KEY_WRAP

在修補 OpenSSL 之前,請先執行以下命令,以切換至帳戶根使用者:

sudo su -

請完成下列步驟:

  1. 執行以下命令,並記下 OpenSSL 版本:

    openssl version
  2. /root/build 目錄中下載最新版 OpenSSL 二進位檔。

  3. 執行以下命令來設定目錄:

    mkdir $HOME/build
    mkdir -p $HOME/local/ssl
    cd $HOME/build
  4. 在 OpenSSL 上記下最新 OpenSSL 下載版本

  5. 執行以下命令以下載並解壓縮二進位檔:

    wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
    tar -zxf openssl-1.1.1w.tar.gz

    **注意:**將 openssl-1.1.1w.tar.gz 替換為最新的 OpenSSL 版本。

  6. 執行以下命令以安裝修補程式、使用 gcc 工具進行修補,並編譯下載的二進位檔:

    yum install patch make gcc -y
  7. 輸入以下區塊,然後在裝置上按 Enter 鍵:

    cat <<-EOF | patch -d $HOME/build/ -p 0
    diff -ur orig/openssl-1.1.1w/apps/enc.c openssl-1.1.1w/apps/enc.c
    --- orig/openssl-1.1.1w/apps/enc.c      
    +++ openssl-1.1.1w/apps/enc.c   
    @@ -534,6 +534,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 版本不是 OpenSSL-1.1.1w,請更改目錄並更新命令。此修補程式僅適用於 OpenSSL-1.1.1w。
    確認修補成功的輸出範例:

    [root@ip-172-31-20-119 build]# cat <<-EOF | patch -d $HOME/build/ -p 0
    diff -ur orig/openssl-1.1.1w/apps/enc.c openssl-1.1.1w/apps/enc.c
    --- orig/openssl-1.1.1w/apps/enc.c
    +++ openssl-1.1.1w/apps/enc.c
    @@ -534,6 +534,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
    patching file openssl-1.1.1w/apps/enc.c
  8. 執行以下命令以編譯 OpenSSL enc.c 檔案:

    cd $HOME/build/openssl-1.1.1w/
    ./config --prefix=$HOME/local --openssldir=$HOME/local/ssl
    make -j$(grep -c ^processor /proc/cpuinfo)
    make install

    **注意:**每個命令的編譯可能需要數分鐘。

最新版 OpenSSL 會將程式庫動態連結至 $HOME/local/ssl/lib/ 目錄,因此您的 Shell 無法直接執行。

在 Shell 中執行 OpenSSL

請完成下列步驟:

  1. 執行以下命令以設定 LD_LIBRARY_PATH 環境變數,使相關程式庫可供 OpenSSL 使用:

    cd $HOME/local/bin/
    echo -e '#!/bin/bash \nenv LD_LIBRARY_PATH=$HOME/local/lib/ $HOME/local/bin/openssl "$@"' > ./openssl.sh

    **注意:**由於您必須多次執行 OpenSSL-1.1.1w,請建立名為 openssl.sh 的指令碼,在執行二進位檔前載入 $HOME/local/ssl/lib/ 路徑。

  2. 執行以下命令以設定指令碼上的執行位元:

    chmod 755 ./openssl.sh
  3. 執行以下命令以啟動 OpenSSL-1.1.1:

    $HOME/local/bin/openssl.sh

    **注意:**您稍後可以使用 $HOME/local/bin/openssl.sh 命令,在環境變數中執行已修補的 OpenSSL 版本。使用已修補的 OpenSSL,您可以執行多個命令。

  4. 輸入 version,然後按 Enter 鍵,以驗證命令提示字元上的 OpenSSL 版本。

  5. 輸入 quit,然後按 Enter 鍵,以離開命令提示字元。

  6. 執行以下命令以設定別名:

    alias OPENSSL_V111="$HOME/local/bin/openssl.sh"

    **注意:**您也可以將別名新增到 .bash_profile。

  7. 使用 OpenSSL 將金鑰轉移至 CloudHSM

AWS 官方已更新 9 個月前