スキップしてコンテンツを表示

OpenSSL にパッチを適用し、CloudHSM の CKM_RSA_AES_KEY_WRAP メカニズムを使用できるようにする方法を教えてください。

所要時間2分
0

AWS CloudHSM の CKM_RSA_AES_KEY_WRAP メカニズムを OpenSSL で使用したいと考えています。

簡単な説明

CloudHSM PKCS #11 ライブラリのRSA_AES_KEY_WRAP メカニズムと互換性がある OpenSSL 暗号である -id-aes256-wrap-pad を使用するには、OpenSSL の最新バージョンをダウンロードしてインストールします。次に、パッチを適用して CKM_RSA_AES_KEY_WRAP メカニズムに必要なエンベロープラップを許可します。

解決策

注:

  • 次の解決策では、クライアント側の OpenSSL のデフォルトインストールは削除、変更されません。
  • この解決策では、AWS アカウントの root ユーザーが Red Hat Enterprise Linux (RHEL) Bash コマンドを使用します。
  • この解決策は、OpenSSL v1.1.x にのみ適用されます。

OpenSSL にパッチを適用して CKM_RSA_AES_KEY_WRAP を許可する

OpenSSL にパッチを適用する前に、次のコマンドを実行してアカウントの root ユーザーに切り替えます。

sudo su -

次の手順を実行します。

  1. 次のコマンドを実行し、OpenSSL のバージョンを書き留めます。

    openssl version
  2. /root/build ディレクトリに最新の OpenSSL バイナリをダウンロードします。

  3. 次のコマンドを実行してディレクトリを設定します。

    mkdir $HOME/build
    mkdir -p $HOME/local/ssl
    cd $HOME/build
  4. OpensSSL のウェブサイトから最新の 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-1.1.1w 以外のバージョンの OpenSSL を使用する場合は、ディレクトリを変更してコマンドを更新してください。このパッチは 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/ ディレクトリ内のライブラリに動的にリンクされるため、シェルで直接実行することはできません。

シェルで 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 を複数回実行する必要があるため、バイナリを実行する前に、$HOME/local/ssl/lib/ パスをロードするための openssl.sh というスクリプトを作成します。

  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公式更新しました 8ヶ月前
コメントはありません

関連するコンテンツ