如何修補 OpenSSL 以啟用與 CloudHSM CKM_RSA_AES_KEY_WRAP 機制搭配使用?

2 分的閱讀內容
0

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

簡短描述

OpenSSL 命令列工具預設未啟用 OpenSSL cipher -id-aes256-wrap-pad 相容於 CloudHSM PKCS #11 機制 RSA_AES_KEY_WRAP

下載並安裝最新版本的 OpenSSL。然後,進行修補以允許 CKM_RSA_AES_KEY_WRAP 機制所需的封套封裝。

解決方法

依照下列步驟使用 Bash 命令建立 OpenSSL v1.1.0 的本機副本。

注意:

  • 這些步驟不會移除或變更 OpenSSL 的用戶端預設安裝。
  • 這些指示將 RHEL 命令與根使用者帳戶搭配使用。使用 sudo su - 命令切換至根使用者。然後,使用修補的 OpenSSL 版本。
  • 這些指示僅適用於 OpenSSL v1.1.x。

修補 OpenSSL 以允許 CKM_RSA_AES_KEY_WRAP

  1. 執行此命令以根使用者身分完成所有步驟,以確保您對目錄和二進位檔案具有正確的許可:

    sudo su -
  2. 執行此命令,然後記下 OpenSSL 版本:

    openssl version
  3. /root/build 目錄中下載最新的 OpenSSL 二進位檔案。執行下列命令來設定目錄:

    mkdir $HOME/buildmkdir -p $HOME/local/ssl
    cd $HOME/build
  4. 記下 OpenSSL 網站中最新的 OpenSSL 下載版本

  5. 下載二進位檔案,然後使用下列命令解壓縮:
    注意:openssl-1.1.1d.tar.gz 取代為步驟 4 中最新的 OpenSSL 版本。

    curl -O https://www.openssl.org/source/openssl-1.1.1d.tar.gztar -zxf openssl-1.1.1d.tar.gz
  6. 安裝修補程式,使 gcc 工具進行修補,然後編譯下載的二進位檔案:

    yum install patch make gcc -y
  7. 複製並貼上此區塊,然後在裝置上選擇 Enter。
    **注意:**如果您使用與 OpenSSL-1.1.1d 不同的版本,可能需要變更目錄。對較新版本的 OpenSSL 可能需要更新這些命令,否則此修補程式可能無法運作。

    cat <<-EOF | patch -d $HOME/build/ -p0diff -ur orig/openssl-1.1.1d/apps/enc.c openssl-1.1.1d/apps/enc.c
    --- orig/openssl-1.1.1d/apps/enc.c      
    +++ openssl-1.1.1d/apps/enc.c   
    @@ -533,6 +533,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

    您會收到一個輸出,確認修補成功,類似下列內容:

    [root@ip-172-31-20-119 ~]# cat <<-EOF | patch -d $HOME/build/ -p0 diff -ur orig/openssl-1.1.1d/apps/enc.c openssl-1.1.1d/apps/enc.c
    --- orig/openssl-1.1.1d/apps/enc.c
    +++ openssl-l.1.1d/apps/enc.c
    @@ -533,6 +533,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.1d/apps/enc.c
  8. 執行此命令來編譯 OpenSSL enc.c 檔案:
    **注意:**每個命令的編譯可能需要幾分鐘。

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

    您已成功安裝最新版本的 OpenSSL。此版本的 OpenSSL 動態連結至 ** $HOME/local/ssl/lib/ ** 目錄中的庫,您的 Shell 無法直接執行它。

  9. 設定環境變數 LD_LIBRARY_PATH,以確保關聯的程式庫可用於 OpenSSL。
    **提示:**由於您必須多次執行 OpenSSL-1.1.1d,因此在執行二進位檔案之前,請建立名為 openssl.sh 的指令碼,以載入 $HOME/local/ssl/lib/ 路徑。

    cd $HOME/local/bin/
    echo -e '#!/bin/bash \nenv LD_LIBRARY_PATH=$HOME/local/lib/ $HOME/local/bin/openssl "$@"' > ./openssl.sh
  10. 使用此命令設定指令碼上的執行位元:

chmod 755 ./openssl.sh
  1. 若要啟動 OpenSSL-1.1.1,請執行下列命令:
$HOME/local/bin/openssl.sh

**提示:**您可以稍後使用 $HOME/local/bin/openssl.sh 命令將修補版本的 OpenSSL 執行到環境變数中。這可讓您參考修補版本的 OpenSSL 以執行多個命令。 您會收到一個命令提示字元。若要驗證 OpenSSL 版本,請輸入 version,然後在裝置上選擇 Enter。 若要結束命令提示字元,請輸入 quit,然後在裝置上選擇 Enter。 若要設定別名,請執行此命令,或將其新增至 .bash_profile 中:

alias OPENSSL_V111="$HOME/local/bin/openssl.sh"
  1. 依照指示使用 OpenSSL 安全地將金鑰傳輸至 CloudHSM

相關資訊

支援的機制

AWS 官方
AWS 官方已更新 3 個月前