我该如何修补 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 命令行工具中默认是未启用的。

下载并安装最新版本的 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

相关信息

Supported mechanisms

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