我该如何修补 OpenSSL 以便用于 CloudHSM CKM_RSA_AES_KEY_WRAP 机制?

上次更新时间:2020 年 1 月 22 日

我想要将 AWS CloudHSM CKM_RSA_AES_KEY_WRAP 机制用于 OpenSSL。

简短描述

默认情况下,Open SSL 命令行工具中未启用与 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"

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?