CloudHSM CKM_RSA_AES_KEY_WRAP 메커니즘과 함께 사용할 수 있도록 OpenSSL을 패치하려면 어떻게 해야 하나요?

3분 분량
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에만 적용됩니다.

CKM_RSA_AES_KEY_WRAP을 허용하도록 OpenSSL을 패치합니다.

  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. 다음 명령을 사용하여 바이너리를 다운로드한 다음 압축을 풉니다.
    참고: 4단계에서 openssl-1.1.1d.tar.gz를 최신 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/ 디렉터리에 있는 라이브러리에 동적으로 연결되며 쉘에서 직접 실행할 수 없습니다.

  9. 환경 변수 LD_LIBRARY_PATH를 설정하여 관련 라이브러리를 OpenSSL에 사용할 수 있는지 확인합니다.
    팁: 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
  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으로 키를 안전하게 전송하세요.

관련 정보

지원되는 메커니즘

AWS 공식
AWS 공식업데이트됨 3달 전
댓글 없음