我该如何修补 OpenSSL 以便用于 CloudHSM CKM_RSA_AES_KEY_WRAP 机制?
上次更新日期:2021 年 12 月 8 日
我想要将 AWS CloudHSM CKM_RSA_AES_KEY_WRAP 机制用于 OpenSSL。
简短描述
默认情况下,OpenSSL 命令行工具中未启用与 CloudHSM PKCS #11 机制 RSA_AES_KEY_WRAP 兼容的 OpenSSL 密码 -id-aes256-wrap-pad。您可以下载并安装最新版本的 OpenSSL,然后对其进行修补,以允许 CKM_RSA_AES_KEY_WRAP 机制所需的信封包装。
解决方法
按照以下说明,使用 bash 命令创建 OpenSSL v1.1.0 的本地副本,而无需删除或更改 OpenSSL 的客户端默认安装。
注意:这些说明对根账户使用 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. 复制并粘贴此数据块,然后在您的设备上选择输入。
注意:如果您使用的版本与 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/ 目录中的二进制文件动态链接,您的 shell 无法直接运行它。设置环境变量 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
11. 要启动 OpenSSL-1.1.1,请运行此命令:
$HOME/local/bin/openssl.sh
提示:稍后,您可以使用 $HOME/local/bin/openssl.sh 命令将 OpenSSL 修补版本运行到环境变量中。这样,您就可以在想要运行多个命令时引用修补版本的 OpenSSL。
12. 您收到命令提示符。要验证 OpenSSL 版本,请输入版本,然后在您的设备上选择输入。
13. 要设置别名,请运行此命令,或将此命令至您的 .bash_profile 中:
alias OPENSSL_V111="$HOME/local/bin/openssl.sh"
14. 按照说明使用 OpenSSL 将密钥安全传输到 CloudHSM 中。