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

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

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

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

  • 아직 프라이빗 키와 해당 인증서가 없다면 HSM에서 프라이빗 키를 생성하세요. 프라이빗 키를 사용하여 SSL/TLS 인증서를 생성하는 데 사용하는 인증서 사인 요청(CSR)을 생성합니다.

  • 프라이빗 키와 해당 인증서가 이미 있는 경우 프라이빗 키를 HSM으로 가져옵니다.

이전 방법 중 어떤 방법을 선택하든 관계없이 HSM에서 가짜 PEM 프라이빗 키를 내보냅니다. 즉 HSM에 저장된 프라이빗 키에 대한 참조를 포함하는 PEM 형식의 프라이빗 키 파일입니다(실제 프라이빗 키가 아님). 웹 서버는 SSL/TLS 오프로드 중에 가짜 PEM 프라이빗 키 파일을 사용하여 HSM의 프라이빗 키를 식별합니다.

프라이빗 키 및 인증서 생성

프라이빗 키 생성

이 섹션에서는 Client SDK 3의 키 관리 유틸리티(KMU)를 사용하여 키 페어를 생성하는 방법을 보여줍니다. HSM 내부에 키 페어가 생성되면 이를 가짜 PEM 파일로 내보내고 해당 인증서를 생성할 수 있습니다.

키 관리 유틸리티(KMU)로 생성된 프라이빗 키는 Client SDK 3 및 Client SDK 5 모두에서 사용할 수 있습니다.

키 관리 유틸리티(KMU) 설치 및 구성
  1. 클라이언트 인스턴스에 연결합니다.

  2. Client SDK 3 설치 및 구성.

  3. 다음 명령을 실행하여 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
    Ubuntu 20.04 LTS
    $ sudo service cloudhsm-client start
    Ubuntu 22.04 LTS

    OpenSSL Dynamic Engine에 대한 지원은 아직 제공되지 않습니다.

  4. 다음 명령을 실행하여 key_mgmt_util 명령줄 도구를 시작합니다.

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

    Command: loginHSM -u CU -s <user name> -p <password>>

프라이빗 키 생성

사용 사례에 따라 RSA 또는 EC 키 페어를 생성할 수 있습니다. 다음 중 하나를 수행하십시오.

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

    genRSAKeyPair 명령을 사용하여 RSA 키 페어를 생성합니다. 이 예제에서는 모듈러스가 2048이고 퍼블릭 지수가 65537이고 레이블이 tls_rsa_keypair인 RSA 키 페어를 생성합니다.

    Command: genRSAKeyPair -m 2048 -e 65537 -l tls_rsa_keypair

    명령이 성공하면 RSA 키 페어가 성공적으로 생성되었음을 나타내는 다음 출력이 표시됩니다.

    Cfm3GenerateKeyPair returned: 0x00 : HSM Return: SUCCESS Cfm3GenerateKeyPair: public key handle: 7 private key handle: 8 Cluster Status: Node id 1 status: 0x00000000 : HSM Return: SUCCESS
  • HSM에서 EC 프라이빗 키를 생성하려면

    genECCKeyPair 명령을 사용하여 EC 키 쌍을 생성합니다. 이 예제에서는 곡선 ID가 2(NID_X9_62_prime256v1 곡선에 해당)이고 레이블이 tls_ec_keypair인 EC 키 페어를 생성합니다.

    Command: genECCKeyPair -i 2 -l tls_ec_keypair

    명령이 성공하면 EC 키 페어가 성공적으로 생성되었음을 나타내는 다음 출력이 표시됩니다.

    Cfm3GenerateKeyPair returned: 0x00 : HSM Return: SUCCESS Cfm3GenerateKeyPair: public key handle: 7 private key handle: 8 Cluster Status: Node id 1 status: 0x00000000 : HSM Return: SUCCESS

가짜 PEM 프라이빗 키 파일 내보내기

HSM에 프라이빗 키가 있으면 가짜 PEM 프라이빗 키 파일을 내보내야 합니다. 이 파일에은 실제 키 데이터가 포함하지 않지만 OpenSSL 동적 엔진이 HSM의 프라이빗 키를 식별할 수 있도록 해줍니다. 그런 다음 프라이빗 키를 사용하여 CSR(인증서 서명 요청)을 생성하고 CSR에 서명하여 인증서를 생성할 수 있습니다.

참고

키 관리 유틸리티(KMU)로 생성된 가짜 PEM 파일은 Client SDK 3 및 Client SDK 5 모두에서 사용할 수 있습니다.

가짜 PEM으로 내보내려는 키에 해당하는 키 핸들을 식별한 후 다음 명령을 실행하여 프라이빗 키를 가짜 PEM 형식으로 내보내고 파일에 저장합니다. 다음 값을 사용자의 값으로 대체합니다.

  • <private_key_handle> – 생성된 프라이빗 키 처리 이 핸들은 이전 단계의 키 생성 명령 중 하나에 의해 생성되었습니다. 이전 예제에서 프라이빗 키의 핸들은 8입니다.

  • <web_server_fake_PEM.key> – 가짜 PEM 키가 기록될 파일의 이름입니다.

Command: getCaviumPrivKey -k <private_key_handle> -out <web_server_fake_PEM.key>

Exit

다음 명령을 실행하여 key_mgmt_util을 중지합니다.

Command: exit

이제 이전 명령에서 <web_server_fake_PEM.key>로 지정된 경로에 시스템에 새 파일이 있어야 합니다. 이 파일은 가짜 PEM 프라이빗 키 파일입니다.

자체 사인된 인증서를 생성합니다.

가짜 PEM 프라이빗 키를 생성한 후에는 이 파일을 사용하여 인증서 사인 요청(CSR) 및 인증서를 생성할 수 있습니다.

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

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

주의

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

OpenSSL Dynamic Engine 설치 및 구성
  1. 클라이언트 인스턴스에 연결합니다.

  2. 설치 및 구성하려면 다음 중 하나를 수행하십시오.

인증서 생성
  1. 이전 단계에서 생성한 가짜 PEM 파일의 사본을 확보하십시오.

  2. CSR 생성

    다음 명령을 실행하여 AWS CloudHSM OpenSSL 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>
  3. 자체 서명된 인증서 생성

    다음 명령을 실행하여 AWS CloudHSM OpenSSL 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단계: 웹 서버 구성하기로 이동합니다.

기존 프라이빗 키 및 인증서 가져오기

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

참고

프라이빗 키 가져오기 및 Client SDK 호환성에 대한 몇 가지 참고 사항:

  • 기존 프라이빗 키를 가져오려면 Client SDK 3이 필요합니다.

  • Client SDK 5와 함께 Client SDK 3의 프라이빗 키를 사용할 수 있습니다.

  • Client SDK 3용 OpenSSL 동적 엔진은 최신 Linux 플랫폼을 지원하지 않지만 Client SDK 5용 OpenSSL 동적 엔진 구현은 지원합니다. Client SDK 3과 함께 제공되는 KMU(키 관리 유틸리티)를 사용하여 기존 프라이빗 키를 가져온 다음 해당 프라이빗 키를 사용하고 Client SDK 5로 OpenSSL Dynamic Engine을 구현하여 최신 Linux 플랫폼에서 SSL/TLS 오프로드를 지원할 수 있습니다. .

Client SDK 3을 사용하여 기존 프라이빗 키를 HSM으로 가져오려면
  1. Amazon EC2 클라이언트 인스턴스에 연결합니다. 필요한 경우, 기존 프라이빗 키와 인증서를 인스턴스로 복사합니다.

  2. Client SDK 3 설치 및 구성

  3. 다음 명령을 실행하여 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
    Ubuntu 20.04 LTS
    $ sudo service cloudhsm-client start
    Ubuntu 22.04 LTS

    OpenSSL Dynamic Engine에 대한 지원은 아직 제공되지 않습니다.

  4. 다음 명령을 실행하여 key_mgmt_util 명령줄 도구를 시작합니다.

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

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

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

      Command: 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입니다.

      Command: 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
  7. 다음 명령을 실행하여 가짜 PEM 형식의 프라이빗 키를 내보내고 파일에 저장합니다. 다음 값을 사용자의 값으로 대체합니다.

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

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

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

    Command: exit

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