2단계: 프라이빗 키 및 SSL/TLS 인증서 생성 또는 가져오기 - AWS CloudHSM

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

2단계: 프라이빗 키 및 SSL/TLS 인증서 생성 또는 가져오기

HTTPS를 활성화하려면 웹 서버 애플리케이션(NGINX 또는 Apache)에 프라이빗 키와 해당 SSL/TLS 인증서가 필요합니다. AWS CloudHSM에 웹 서버 SSL/TLS 오프로드를 사용하려면 AWS CloudHSM 클러스터의 HSM에 프라이빗 키를 저장해야 합니다. 이 작업은 다음 중 한 가지 방법으로 수행할 수 있습니다.

이전 방법 중 어느 방법을 선택하든 관계없이가짜 PEM 개인 키HSM에서 파일을 저장합니다. 이 파일에는 HSM에 저장된 프라이빗 키에 대한 참조가 포함됩니다 (실제 프라이빗 키가 아님). 웹 서버는 가짜 PEM 프라이빗 키를 사용하여 SSL/TLS 처리를 HSM으로 오프로드합니다.

프라이빗 키 및 인증서 생성

HTTPS에 사용할 프라이빗 키와 해당 SSL/TLS 인증서가 없는 경우 HSM에서 프라이빗 키를 생성할 수 있습니다. 그런 다음 프라이빗 키를 사용하여 인증서 서명 요청(CSR)을 생성할 수 있습니다. CSR에 서명하여 인증서를 생성합니다.

HSM에서 프라이빗 키를 생성하려면

  1. 클라이언트 인스턴스에 연결합니다.

  2. CU (Cryptographic User) 의 인증서가 포함된 환경 변수를 설정합니다.

    Amazon Linux
    export n3fips_password=<CU user name>:<password>

    Replace<CU user name><password>CU 자격 증명을 사용합니다.

    Amazon Linux 2
    export n3fips_password=<CU user name>:<password>

    Replace<CU user name><password>CU 자격 증명을 사용합니다.

    CentOS 7
    export n3fips_password=<CU user name>:<password>

    Replace<CU user name><password>CU 자격 증명을 사용합니다.

    CentOS 8
    export CLOUDHSM_PIN=<CU user name>:<password>

    Replace<CU user name><password>CU 자격 증명을 사용합니다.

    참고

    클라이언트 SDK 5는CLOUDHSM_PINCU의 자격 증명을 저장하기 위한 환경 변수입니다. 클라이언트 SDK 3에서는 CU 자격 증명을n3fips_password환경 변수 클라이언트 SDK 5는 두 환경 변수를 모두 지원하지만 다음을 사용하는 것이 좋습니다.CLOUDHSM_PIN.

    Red Hat 7
    export n3fips_password=<CU user name>:<password>

    Replace<CU user name><password>CU 자격 증명을 사용합니다.

    Red Hat 8
    export CLOUDHSM_PIN=<CU user name>:<password>

    Replace<CU user name><password>CU 자격 증명을 사용합니다.

    참고

    클라이언트 SDK 5는CLOUDHSM_PINCU의 자격 증명을 저장하기 위한 환경 변수입니다. 클라이언트 SDK 3에서는 CU 자격 증명을n3fips_password환경 변수 클라이언트 SDK 5는 두 환경 변수를 모두 지원하지만 다음을 사용하는 것이 좋습니다.CLOUDHSM_PIN.

    Ubuntu 16.04 LTS
    export n3fips_password=<CU user name>:<password>

    Replace<CU user name><password>CU 자격 증명을 사용합니다.

    Ubuntu 18.04 LTS
    export CLOUDHSM_PIN=<CU user name>:<password>

    Replace<CU user name><password>CU 자격 증명을 사용합니다.

    참고

    클라이언트 SDK 5는CLOUDHSM_PINCU의 자격 증명을 저장하기 위한 환경 변수입니다. 클라이언트 SDK 3에서는 CU 자격 증명을n3fips_password환경 변수 클라이언트 SDK 5는 두 환경 변수를 모두 지원하지만 다음을 사용하는 것이 좋습니다.CLOUDHSM_PIN.

  3. 다음 명령을 실행하여 OpenSSL용 AWS CloudHSM Dynamic Engine을 사용해 HSM에 프라이빗 키를 생성합니다. 이 명령은 또 가짜 PEM 프라이빗 키를 내보내 파일에 저장합니다. <web_server_fake_PEM.key>를 내보낸 가짜 PEM 프라이빗 키에 사용할 파일 이름으로 바꿉니다.

    openssl genrsa -engine cloudhsm -out <web_server_fake_PEM.key> 2048

인증서 서명 요청(CSR)을 생성하려면

다음 명령을 실행하여 OpenSSL용 AWS CloudHSM Dynamic Engine을 사용해 인증서 서명 요청(CSR)을 생성하십시오. <web_server_fake_PEM.key>를 가짜 PEM 프라이빗 키가 포함된 파일 이름으로 바꿉니다. <web_server.csr>을 CSR이 포함된 파일의 이름으로 바꿉니다.

req 명령은 대화식입니다. 각 필드에 응답합니다. 필드 정보가 SSL/TLS 인증서에 복사됩니다.

openssl req -engine cloudhsm -new -key <web_server_fake_PEM.key> -out <web_server.csr>

프로덕션 환경에서는 일반적으로 CA(인증 기관)을 사용하여 CSR에서 인증서를 생성합니다. 테스트 환경에는 CA가 필요하지 않습니다. CA를 사용하는 경우에는 CSR 파일(<web_server.csr>)을 CA에 전송하고 CA를 사용하여 서명된 SSL/TLS 인증서를 생성합니다. 웹 서버는 서명된 인증서를 HTTPS에 사용합니다.

CA 사용의 대안으로 OpenSSL용 AWS CloudHSM Dynamic Engine을 사용하여 자체 서명 인증서를 생성할 수 있습니다. 자체 서명된 인증서는 브라우저에서 신뢰하지 않으며 프로덕션 환경에서 사용해서는 안 됩니다. 테스트 환경에서는 이러한 인증서를 사용할 수 있습니다.

주의

자체 서명된 인증서는 테스트 환경에서만 사용해야 합니다. 프로덕션 환경의 경우 인증 기관과 같은 추가 보안 방법을 사용하여 인증서를 생성하십시오.

자체 서명된 인증서를 생성하려면

다음 명령을 실행하여 OpenSSL용 AWS CloudHSM Dynamic Engine을 사용해 HSM의 프라이빗 키로 CSR에 서명합니다. 이렇게 하면 자체 서명된 인증서가 생성됩니다. 명령의 다음 값을 사용자의 값으로 바꿉니다.

  • <web_server.csr>— CSR이 포함된 파일 이름

  • <web_server_fake_PEM.key>— 가짜 PEM 프라이빗 키가 포함된 파일 이름

  • <web_server.crt>— 웹 서버 인증서가 포함될 파일 이름

openssl x509 -engine cloudhsm -req -days 365 -in <web_server.csr> -signkey <web_server_fake_PEM.key> -out <web_server.crt>

이 단계들을 완료한 후 3단계: 웹 서버 구성으로 이동합니다.

클라이언트 SDK 3으로 기존 프라이빗 키 가져오기

웹 서버에서 HTTPS에 사용할 프라이빗 키와 해당 SSL/TLS 인증서가 이미 있을 수도 있습니다. 그런 경우 이 섹션의 단계를 완료하여 해당 키를 HSM으로 가져올 수 있습니다.

참고

개인 키 가져오기 및 클라이언트 SDK 호환성에 대한 몇 가지 참고 사항:

  • 기존 개인 키를 가져오려면 클라이언트 SDK 3이 필요합니다.

  • 클라이언트 SDK 5에서 클라이언트 SDK 3의 개인 키를 사용할 수 있습니다.

  • 클라이언트 SDK 3용 OpenSSL 동적 엔진은 최신 Linux 플랫폼을 지원하지 않지만 클라이언트 SDK 5용 OpenSSL 동적 엔진 구현은 지원합니다. Client SDK 3과 함께 제공되는 키 관리 도구를 사용하여 기존 개인 키를 가져올 수 있습니다.프라이빗 키 사용클라이언트 SDK 5와 OpenSSL 다이내믹 엔진의 구현은 레드햇 8, CentOS 8, 우분투 18.04 LTS와 같은 최신 리눅스 플랫폼에서 SSL/TLS 오프로드를 지원합니다.

클라이언트 SDK 3을 사용하여 기존 프라이빗 키를 HSM으로 가져오려면

  1. Amazon EC2 클라이언트 인스턴스에 Connect. 필요한 경우, 기존 프라이빗 키와 인증서를 인스턴스로 복사합니다.

  2. 다음 명령을 실행하여 AWS CloudHSM 클라이언트를 시작합니다.

    Amazon Linux
    $ sudo start cloudhsm-client
    Amazon Linux 2
    $ sudo service cloudhsm-client start
    CentOS 7
    $ sudo service cloudhsm-client start
    CentOS 8
    $ sudo service cloudhsm-client start
    RHEL 7
    $ sudo service cloudhsm-client start
    RHEL 8
    $ sudo service cloudhsm-client start
    Ubuntu 16.04 LTS
    $ sudo service cloudhsm-client start
    Ubuntu 18.04 LTS
    $ sudo service cloudhsm-client start
  3. 다음 명령을 실행하여 key_mgmt_util 명령줄 도구를 시작합니다.

    /opt/cloudhsm/bin/key_mgmt_util
  4. 다음 명령을 실행하여 HSM에 로그인합니다. <user name><password>를 CU(Cryptographic User)의 사용자 이름과 암호로 바꿉니다.

    loginHSM -u CU -s <user name> -p <password>
  5. 다음 명령을 실행하여 프라이빗 키를 HSM으로 가져옵니다.

    1. 다음 명령을 실행하여 현재 세션에만 유효한 대칭 래핑 키를 생성합니다. 명령과 출력은 다음과 같습니다.

      genSymKey -t 31 -s 16 -sess -l wrapping_key_for_import Cfm3GenerateSymmetricKey returned: 0x00 : HSM Return: SUCCESS Symmetric Key Created. Key Handle: 6 Cluster Error Status Node id 0 and err state 0x00000000 : HSM Return: SUCCESS
    2. 다음 명령을 실행하여 기존 프라이빗 키를 HSM으로 가져옵니다. 명령과 출력은 다음과 같습니다. 다음 값을 사용자의 값으로 대체합니다.

      • <web_server_existing.key>— 프라이빗 키가 포함된 파일 이름

      • <web_server_imported_key>— 가져온 프라이빗 키의 레이블

      • <wrapping_key_handle>— 이전 명령에서 생성된 래핑 키 핸들 이전 예제에서 래핑 키 핸들은 6입니다.

      importPrivateKey -f <web_server_existing.key> -l <web_server_imported_key> -w <wrapping_key_handle> BER encoded key length is 1219 Cfm3WrapHostKey returned: 0x00 : HSM Return: SUCCESS Cfm3CreateUnwrapTemplate returned: 0x00 : HSM Return: SUCCESS Cfm3UnWrapKey returned: 0x00 : HSM Return: SUCCESS Private Key Unwrapped. Key Handle: 8 Cluster Error Status Node id 0 and err state 0x00000000 : HSM Return: SUCCESS
  6. 다음 명령을 실행하여 가짜 PEM 형식의 프라이빗 키를 내보내고 파일에 저장합니다. 다음 값을 사용자의 값으로 대체합니다.

    • <private_key_handle>— 가져온 프라이빗 키의 핸들 이 핸들은 이전 단계에서 두 번째 명령으로 생성되었습니다. 이전 예제에서 프라이빗 키의 핸들은 8입니다.

    • <web_server_fake_PEM.key>— 내보낸 가짜 PEM 프라이빗 키가 포함된 파일 이름

    getCaviumPrivKey -k <private_key_handle> -out <web_server_fake_PEM.key>
  7. 다음 명령을 실행하여 key_mgmt_util을 중지합니다.

    exit

이 단계들을 완료한 후 3단계: 웹 서버 구성으로 이동합니다.