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

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

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

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

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

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

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

프라이빗 키 및 인증서 생성

개인 키 생성

이 단원에서는 다음을 사용하여 키 페어를 생성하는 방법을 보여줍니다.키 관리 유틸리티 (KMU)클라이언트 SDK 3에서. HSM 내에서 key pair 페어가 생성되면 가짜 PEM 파일로 내보내고 해당 인증서를 생성할 수 있습니다.

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

키 관리 유틸리티 (KMU) 설치 및 구성

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

  2. 설치 및 구성3 클라이언트 SDK

  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
  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 key pair 페어를 생성할 수 있습니다. 다음 중 하나를 수행하세요.

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

    사용genRSAKeyPairRSA key pair 페어를 생성하려면 명령을 실행합니다. 이 예제에서는 모듈러스 2048, 공용 지수가 65537이고 레이블이 다음과 같은 RSA key pair 생성합니다.tls_rsa_키페어.

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

    명령이 성공했다면 RSA key pair 페어를 성공적으로 생성했음을 나타내는 다음 결과가 표시되어야 합니다.

    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 key pair 생성합니다. 이 예제에서는 곡선 ID가 2인 EC key pair 생성합니다 (NID_X9_62_prime256v1곡선) 및 레이블tls_ec_키페어.

    Command: genECCKeyPair -i 2 -l tls_ec_keypair

    명령이 성공했다면 EC key pair 페어를 성공적으로 생성했음을 나타내는 다음 결과가 표시되어야 합니다.

    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 Dynamic Engine에서 HSM의 개인 키를 식별할 수 있습니다. 그런 다음 프라이빗 키를 사용하여 인증서 서명 요청 (CSR) 을 생성하고 CSR에 서명하여 인증서를 생성할 수 있습니다.

참고

키 관리 유틸리티 (KMU) 로 생성된 가짜 PEM 파일은 클라이언트 SDK 3 및 클라이언트 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를 사용하는 경우에는 CSR 파일을 CSR 파일에 전송하고 HTTPS용 웹 서버에서 제공하는 서명된 SSL/TLS 인증서를 사용합니다.

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

주의

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

OpenSSL Dynamic Engine 설치 및 구성

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

  2. 설치 및 구성하려면 다음 중 한 가지를 수행합니다.

인증서 생성

  1. 이전 단계에서 생성된 가짜 PEM 파일의 복사본을 가져옵니다.

  2. CSR 생성

    다음 명령을 실행하여AWS CloudHSMOpenSSL 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 CloudHSMOpenSSL Dynamic Engine을 사용해 프라이빗 키로 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으로 가져올 수 있습니다.

참고

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

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

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

  • 클라이언트 SDK 3용 OpenSSL 동적 엔진은 최신 Linux 플랫폼을 지원하지 않지만 클라이언트 SDK 5용 OpenSSL 동적 엔진 구현은 지원합니다. 클라이언트 SDK 3과 함께 제공된 키 관리 유틸리티 (KMU) 를 사용하여 기존 개인 키를 가져올 수 있습니다.프라이빗 키 사용최신 리눅스 플랫폼에서 SSL/TLS 오프로드를 지원하기 위해 클라이언트 SDK 5와 함께 OpenSSL 다이내믹 엔진을 구현했습니다.

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

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

  2. 설치 및 구성3 클라이언트 SDK

  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
  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단계: 웹 서버 구성으로 이동합니다.