Cloud KMS로 키를 가져오려면 먼저 RSA-OAEP
(OpenSSL 1.1에 기본적으로 포함되어 있음)와 패딩이 있는 AES 키 래핑(OpenSSL 1.1에 기본적으로 포함되어 있지 않음)을 모두 포함하는 PKCS#11 CKM_RSA_AES_KEY_WRAP
메커니즘을 사용하여 키를 래핑해야 합니다. 이 메커니즘은 OpenSSL에 포함되지 않습니다.
가져오기가 진행되는 동안 Google Cloud CLI를 사용하여 각 키를 자동으로 래핑하는 것이 좋습니다. 규정 준수 또는 규제 요구사항으로 인해 키를 수동으로 래핑해야 하는 경우 먼저 OpenSSL을 다시 컴파일하여 패딩으로 AES 키 래핑을 지원해야 합니다. OpenSSL을 다시 컴파일한 후 수동으로 키를 래핑할 수 있습니다.
시작하기 전에
이 주제의 절차에 따라 생성된 패치가 적용된 바이너리로 시스템의 기본 제공 OpenSSL 바이너리를 덮어쓰지 마세요. 예를 들어, 패치가 적용된 OpenSSL을 /usr
에 직접 설치하지 마세요. 이 절차를 정확하게 따르면 패치가 적용된 OpenSSL이 $HOME/build
에 내장되어 $HOME/local/bin
에 설치됩니다.
${HOME}/local/bin
이 이미 있는 경우 이 항목의 단계를 수행하기 전에 콘텐츠를 백업하거나 파일을 다른 위치로 옮기세요.
OpenSSL v1.1.0 패치 및 설치
OpenSSL을 사용하여 키를 Cloud KMS로 가져오기 전에 수동으로 래핑하는 경우 OpenSSL v1.1.0이 필요하며 다음 패치가 적용됩니다. OpenSSL을 컴파일하고 시스템의 기본 OpenSSL 설치와 다른 위치에 설치해야 합니다.
https://www.openssl.org/source에서 OpenSSL 1.1.0l 버전의 소스를 다운로드합니다. 1.1.0 코드 행의 최신 출시 버전입니다. 이 절차에서 v1.1.1과 같은 그 이상 버전의 OpenSSL을 사용하지 마세요. 패치가 적용되지 않습니다.
다음 명령어를 사용하여 아카이브를
${HOME}/build/openssl/
에 추출합니다. 이 명령어는 OpenSSL 버전을 포함하는 기본 디렉터리를 재정의하며 자주 변경됩니다. /path/to/downloaded-openssl.tar.gz를 다운로드한.tar.gz
아카이브의 경로로 바꿉니다.# Create the directory for the eventual OpenSSL binaries mkdir -p ${HOME}/local/ssl # Create the build directory mkdir -p ${HOME}/build/openssl # Extract the archive to ${HOME}/build/openssl tar xzvf /path/to/downloaded-openssl.tar.gz \ -C ${HOME}/build/openssl/ \ --strip-components 1
다음 명령어를 사용하여 압축을 푼 OpenSSL 소스에 커스텀 패치를 적용합니다. 패치는
EVP_CIPHER_CTX_FLAG_WRAP_ALLOW
플래그를 사용 설정합니다.cd ${HOME}/build cat <<-EOF | patch -d . -p0 --- orig/openssl/apps/enc.c 2020-01-17 14:39:54.991708785 -0500 +++ openssl/apps/enc.c 2020-01-17 14:41:33.215704269 -0500 @@ -482,6 +482,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
다음 명령어를 실행하여 패치가 적용된 소스에서 OpenSSL 바이너리 및 라이브러리를 빌드하고, 빌드의 유효성을 테스트하고, 바이너리 및 라이브러리를
${HOME}/local
디렉터리에 설치합니다.CPUS=$(getconf _NPROCESSORS_ONLN) cd ${HOME}/build/openssl ./config --prefix=${HOME}/local --openssldir=${HOME}/local/ssl make -j${CPUS} make test make install
--prefix
또는--openssldir
플래그를 생략하거나 수정해서는 안됩니다. 시스템의 OpenSSL 설치를 덮어쓰지 않도록 합니다.다음 명령어를 실행하여 새 OpenSSL 바이너리가 성공적으로 설치되었는지 확인합니다.
test -x ${HOME}/local/bin/openssl || echo FAIL
바이너리가 올바르게 설치되면 출력이 표시되지 않습니다.
FAIL
가 표시되면 이전에 실행한make
,make test
,make install
명령어의 출력을 확인합니다.패치가 적용된 OpenSSL 바이너리는
${HOME}/local/ssl/lib/
의 OpenSSL 라이브러리와 동적으로 연결되지만ld
명령어는 기본적으로 이러한 라이브러리의 색인을 생성하지 않습니다. 다음 명령어를 실행하여 패치가 적용된 라이브러리를${LD_LIBRARY_PATH}
에 추가하는 래퍼 스크립트를 생성한 다음 패치가 적용된 OpenSSL에 대해 CLI를 호출합니다.cat > ${HOME}/local/bin/openssl.sh <<-EOF #!/bin/bash env LD_LIBRARY_PATH=${HOME}/local/lib/ ${HOME}/local/bin/openssl "\$@" EOF chmod u+x ${HOME}/local/bin/openssl.sh
다음 명령어를 사용하여 스크립트가 시작하는 OpenSSL 버전이 방금 빌드하고 설치한 버전인지 확인합니다.
${HOME}/local/bin/openssl.sh version
이제 ${HOME}/local/bin/openssl.sh
래퍼 스크립트를 호출하면 수동으로 키를 래핑하여 가져오기할 수 있습니다.