CloudHSM CKM_RSA_AES_KEY_WRAP メカニズムで使用できるように OpenSSL にパッチを適用する方法を教えてください。
最終更新日: 2020 年 9 月 25 日
AWS CloudHSM CKM_RSA_AES_KEY_WRAP メカニズムを OpenSSL で使用したいと考えています。
簡単な説明
CloudHSM PKCS #11 メカニズム RSA_AES_KEY_WRAP と互換性のある OpenSSL 暗号 -id-aes256-wrap-pad は、Open SSL コマンドラインツールではデフォルトで有効になっていません。OpenSSL の最新バージョンをダウンロードしてインストールし、パッチを適用して、CKM_RSA_AES_KEY_WRAP メカニズムに必要なエンベロープラッピングを許可することができます。
解決方法
クライアントの OpenSSL のデフォルトインストールを削除または変更せずに、bash コマンドを使用して OpenSSL v1.1.0 のローカルコピーを作成するには、以下の手順に従ってください。
注: 以下の手順では、ルートアカウントで RHEL コマンドを使用します。sudo su - を使用してルートに切り替えてから、パッチを適用したバージョンの OpenSSL を使用できます。
OpenSSL をパッチ適用して CKM_RSA_AES_KEY_WRAP を許可する
1. すべての手順をルートとして実行し、次のコマンドを使用して、ディレクトリとバイナリに対する正しいアクセス許可があることを確認します。
sudo su -
2. 次のコマンドを実行して、OpenSSL のバージョンをメモします。
openssl version
3. /root/build ディレクトリに最新の OpenSSL バイナリをダウンロードします。次のコマンドを実行して、ディレクトリをセットアップします。
mkdir $HOME/build
mkdir -p $HOME/local/ssl
cd $HOME/build
4. https://www.openssl.org/source/ のダウンロードページにある最新の OpenSSL バージョンをメモします。
5. 次のコマンドを使用して、バイナリをダウンロードして解凍します。
注: openssl-1.1.1d.tar.gz をステップ 4 の最新の OpenSSL バージョンに置き換えます。
curl -O https://www.openssl.org/source/openssl-1.1.1d.tar.gz
tar -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/ -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-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
9. OpenSSL の最新バージョンが正常にインストールされました。このバージョンの OpenSSL は、$HOME/local/ssl/lib/ ディレクトリ内のライブラリに動的にリンクされており、シェルで直接実行することはできません。環境変数 LD_LIBRARY_PATH を設定して、関連ライブラリが OpenSSL で使用できるようにします。
ヒント: OpenSSL-1.1.1d を複数回実行する必要があるため、バイナリを実行する前に $HOME/local/ssl/lib/ パスをロードする openssl.sh という名前のスクリプトを作成します。
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
11. OpenSSL-1.1.1 を起動するには、次のコマンドを実行します。
$HOME/local/bin/openssl.sh
ヒント: 後で $HOME/local/bin/openssl.sh コマンドを使用して、パッチを適用したバージョンの OpenSSL を環境変数で実行できます。これにより、複数のコマンドを実行するときに、パッチを適用したバージョンの OpenSSL を参照できます。
12. コマンドプロンプトが表示されます。OpenSSL バージョンを確認するには、version と入力してから、デバイスで [Enter] を選択します。
13. エイリアスを設定するには、次のコマンドを実行するか、.bash_profile に追加します。
alias OPENSSL_V111="$HOME/local/bin/openssl.sh"
14. 指示に従って、OpenSSL で CloudHSM にキーを安全に転送します。