CloudHSM CKM_RSA_AES_KEY_WRAP 메커니즘과 함께 사용할 수 있도록 OpenSSL에 패치를 적용하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 9월 25일

OpenSSL을 AWS CloudHSM CKM_RSA_AES_KEY_WRAP 메커니즘과 함께 사용하고 싶습니다.

간략한 설명

CloudHSM PKCS #11 메커니즘 RSA_AES_KEY_WRAP과 호환되는 OpenSSL 암호 -id-aes256-wrap-pad는 기본적으로 OpenSSL 명령줄 도구에 활성화되어 있지 않습니다. 최신 버전의 OpenSSL을 다운로드하여 설치한 다음 CKM_RSA_AES_KEY_WRAP 메커니즘에 필요한 엔벌로프 래핑을 허용하도록 패치를 적용할 수 있습니다.

해결 방법

OpenSSL의 클라이언트 기본 설치를 제거하거나 변경하지 않고 다음 지침을 따라 bash 명령을 사용하여 OpenSSL v1.1.0의 로컬 사본을 생성합니다.

참고: 이 지침에서는 루트 계정에서 RHEL 명령을 사용합니다. sudo su -를 사용하여 루트로 전환한 다음, OpenSSL의 패치 버전을 사용할 수 있습니다.

CKM_RSA_AES_KEY_WRAP을 허용하도록 OpenSSL에 패치 적용

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/ 디렉터리의 라이브러리에 동적으로 연결되며 셸에서 직접 실행할 수는 없습니다. 연결된 라이브러리를 OpenSSL에 사용할 수 있도록 환경 변수 LD_LIBRARY_PATH를 설정합니다.

팁: 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"

이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요합니까?