
# 如何修补OpenSSL以使用-id-aes256-wrap-pad包装非对称密钥？
#### 问题描述
默认情况下，OpenSSL命令行工具中未启用包装密码算法-id-aes256-wrap-pad。您可以下载并安装最新版本的OpenSSL，然后对其进行修补，以完成导入非对称密钥所需的信封包装。
#### 解决方法
按照以下说明，使用bash命令创建已有OpenSSL的本地副本，而无需删除或更改OpenSSL的客户端默认安装。
1. 以**root** 用户完成以下操作步骤，以确保您对使用此命令的目录和二进制文件拥有正确的权限。
   
   **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. 使用以下命令下载并解压缩二进制文件。
6. 将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**
   
   
7. 安装修补程序，使gcc工具进行修补，然后编译已下载的二进制文件。 
   **yum install patch make gcc -y**
   ![](https://support.huaweicloud.com/dew_faq/public_sys-resources/note_3.0-zh-cn.png)
   如果您使用的版本与OpenSSL-1.1.1d不同，您可能需要更改目录。您可能需要为更新的OpenSSL的版本更新这些命令，否则此修补程序可能无法正常工作。
   
   
8. 复制并粘贴此数据块，然后在您的设备上选择输入。 
   ```
   sed -i "/BIO_get_cipher_ctx(benc, &ctx);/a\ EVP_CIPHER_CTX_set_flags(ctx, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW);" $HOME/build/openssl-1.1.1d/apps/enc.c
   ```
   
   
9. 运行此命令来编译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**
   
   
10. 成功安装最新版本的OpenSSL后，此版本的OpenSSL已与$HOME/local/ssl/lib/目录中的二进制文件动态链接，您的shell无法直接运行它。设置环境变量LD_LIBRARY_PATH，以确保有相关的库可用于OpenSSL。
11. 由于您需要多次运行修复版本的OpenSSL，请创建一个名为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**
    
    
12. 使用以下命令在脚本上设置执行位。 
    **chmod 755 ./openssl.sh**
    
    
13. 要启动修复版本的OpenSSL，请执行此命令。 
    **$HOME/local/bin/openssl.sh**
    
    
 
