클라이언트와 AWS CloudHSM 간에 상호 TLS 설정(권장) - AWS CloudHSM

클라이언트와 AWS CloudHSM 간에 상호 TLS 설정(권장)

다음 주제에서는 클라이언트와 AWS CloudHSM 간의 상호 TLS(mTLS)를 활성화하기 위해 완료해야 하는 단계를 설명합니다. 현재 이 기능은 hsm2m.medium에서만 사용할 수 있습니다. HSM 유형에 대한 자세한 내용은 AWS CloudHSM 클러스터 모드 섹션을 참조하세요.

단계 1. HSM에 트러스트 앵커 생성 및 등록

mTLS를 활성화하기 전에 트러스트 앵커를 생성하고 HSM에 등록해야 합니다. 다음 2단계 프로세스로 진행됩니다.

프라이빗 키 및 자체 서명된 루트 인증서 생성

참고

프로덕션 클러스터의 경우 신뢰할 수 있는 임의 소스를 사용하여 안전한 방식으로 키를 생성해야 합니다. 안전한 오프사이트 및 오프라인 HSM이나 이에 상응하는 디바이스를 사용하는 것이 좋습니다. 키를 안전하게 저장하십시오.

개발 및 테스트 중에 원하는 편리한 도구(예: OpenSSL)를 사용하여 키를 만들고 루트 인증서에 자체 서명할 수 있습니다. AWS CloudHSM용 mTLS 활성화에서 클라이언트 인증서에 서명하려면 키 및 루트 인증서가 필요합니다.

다음 예제에서는 OpenSSL을 사용하여 프라이빗 키 및 자체 서명된 루트 인증서를 생성하는 방법을 보여줍니다.

예 — OpenSSL을 사용하여 개인 키를 생성하세요

다음 명령을 사용하여 AES-256 알고리즘으로 암호화된 4096비트 RSA 키를 생성합니다. 이 예를 사용하려면 <mtls_ca_root_1.key>를 키를 저장하려는 파일 이름으로 바꿉니다.

$ openssl genrsa -out <mtls_ca_root_1.key> -aes256 4096 Generating RSA private key, 4096 bit long modulus .....................................+++ .+++ e is 65537 (0x10001) Enter pass phrase for mtls_ca_root_1.key: Verifying - Enter pass phrase for mtls_ca_root_1.key:
예 – OpenSSL을 사용하여 자체 서명된 루트 인증서 생성

다음 명령을 사용하여 방금 생성한 프라이빗 키에서 mtls_ca_root_1.crt라는 자체 서명된 루트 인증서를 생성합니다. 인증서는 25년(9130일) 동안 유효합니다. 화면의 지침을 읽고 프롬프트의 메시지를 따릅니다.

$ openssl req -new -x509 -days 9130 -key mtls_ca_root_1.key -out mtls_ca_root_1.crt Enter pass phrase for mtls_ca_root_1.key: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]: State or Province Name (full name) [Some-State]: Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]: Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []: Email Address []:

HSM에 트러스트 앵커 등록

자체 서명된 루트 인증서를 생성한 후 관리자는 이를 AWS CloudHSM 클러스터에 트러스트 앵커로 등록해야 합니다.

HSM에 트러스트 앵커를 등록하려면
  1. 다음 명령을 사용하여 CloudHSM CLI를 시작합니다.

    Linux
    $ /opt/cloudhsm/bin/cloudhsm-cli interactive
    Windows
    C:\Program Files\Amazon\CloudHSM\bin\> .\cloudhsm-cli.exe interactive
  2. CloudHSM CLI를 사용하여 관리자로 로그인합니다.

    aws-cloudhsm > login --username admin --role admin Enter password: { "error_code": 0, "data": { "username": "admin", "role": "admin" } }
  3. CloudHSM CLI를 사용하여 트러스트 앵커 등록 명령을 사용하여 트러스트 앵커를 등록합니다. 자세한 내용은 다음 예제를 참조하거나 help cluster mtls register-trust-anchor 명령을 사용하십시오.

예 – AWS CloudHSM 클러스터에 트러스트 앵커 등록

다음 예제에서는 CloudHSM CLI에서 cluster mtls register-trust-anchor 명령을 사용하여 트러스트 앵커를 HSM에 등록하는 방법을 보여줍니다. 이 명령을 사용하려면 관리자가 HSM에 로그인되어 있어야 합니다. 이 값들을 사용자의 값으로 대체합니다.

aws-cloudhsm > cluster mtls register-trust-anchor --path </path/mtls_ca_root_1.crt> { "error_code": 0, "data": { "trust_anchor": { "certificate-reference": "0x01", "certificate": "<PEM Encoded Certificate>", "cluster-coverage": "full" } } }
참고

AWS CloudHSM은 중간 인증서를 트러스트 앵커로 등록하는 것을 지원합니다. 이러한 경우 전체 PEM 인코딩 인증서 체인 파일을 계층 순서로 HSM에 등록해야 합니다.

AWS CloudHSM은 6980바이트의 인증서 체인을 지원합니다.

트러스트 앵커를 성공적으로 등록한 후 cluster mtls list-trust-anchors 명령을 실행하여 다음과 같이 현재 등록된 트러스트 앵커를 확인할 수 있습니다.

aws-cloudhsm > cluster mtls list-trust-anchors { "error_code": 0, "data": { "trust_anchors": [ { "certificate-reference": "0x01", "certificate": "<PEM Encoded Certificate>", "cluster-coverage": "full" } ] } }
참고

hsm2m.medium에 등록할 수 있는 최대 트러스트 앵커 수는 두 개(2)입니다.

단계 2. AWS CloudHSM에 대한 mTLS 활성화

AWS CloudHSM용 mTLS를 활성화하려면 트러스트 앵커 생성 및 HSM에 등록 에서 생성한 루트 인증서로 서명된 프라이빗 키와 클라이언트 인증서를 생성한 다음 클라이언트 SDK 5 구성 도구를 사용하여 프라이빗 키 경로와 클라이언트 인증서 체인 경로를 설정해야 합니다.

프라이빗 키 및 클라이언트 인증서 체인 생성

예 — OpenSSL을 사용하여 개인 키를 생성하세요

다음 명령을 사용하여 AES-256 알고리즘으로 암호화된 4096비트 RSA 키를 생성합니다. 이 예를 사용하려면 <ssl-client.key>를 키를 저장하려는 파일 이름으로 바꿉니다.

$ openssl genrsa -out <ssl-client.key> -aes256 4096 Generating RSA private key, 4096 bit long modulus .....................................+++ .+++ e is 65537 (0x10001) Enter pass phrase for ssl-client.key: Verifying - Enter pass phrase for ssl-client.key:
예 - OpenSSL을 사용하여 인증서 서명 요청(CSR) 생성

다음 명령을 사용하여 OpenSSL용 KeyTool을 사용해 방금 생성한 프라이빗 키에서 인증서 서명 요청(CSR)을 생성합니다. 화면의 지침을 읽고 프롬프트의 메시지를 따릅니다.

$ openssl req -new -key <ssl-client.key> -out <ssl-client.csr> Enter pass phrase for ssl-client.key: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]: State or Province Name (full name) [Some-State]: Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]: Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []: Email Address []:
예 - 루트 인증서를 사용하여 CSR 서명

다음 명령을 사용하여 HSM에 트러스트 앵커 생성 및 등록에서 생성하고 등록한 루트 인증서로 CSR에 서명하고 ssl-client.crt라는 클라이언트 인증서를 생성합니다. 인증서는 5년(1826일) 동안 유효합니다.

$ openssl x509 -req -days 1826 -in <ssl-client.csr> -CA <mtls_ca_root_1.crt> -CAkey <mtls_ca_root_1.key> -CAcreateserial -out <ssl-client.crt>
예 - 클라이언트 인증서 체인 생성

다음 명령을 사용하여 트러스트 앵커 생성 및 HSM에 등록에서 만들고 등록한 클라이언트 인증서와 루트 인증서를 결합하고 ssl-client.pem이라는 클라이언트 인증서 체인을 생성하며, 이는 다음 단계에서 구성하는 데 사용됩니다.

$ cat <ssl-client.crt> <mtls_ca_root_1.crt> > <ssl-client.pem>
참고

중간 인증서를 생성에 등록하고 트러스트 앵커를 트러스트 앵커로 HSM에 등록하는 경우 클라이언트 인증서를 전체 인증서 체인과 결합하여 클라이언트 인증서 체인을 생성해야 합니다.

클라이언트 SDK 5용 mTLS 구성

클라이언트 SDK 5 구성 도구를 사용하여 올바른 클라이언트 키 경로와 클라이언트 인증서 체인 경로를 제공하여 상호 TLS를 활성화합니다. 클라이언트 SDK 5의 구성 도구에 대한 자세한 내용은 AWS CloudHSM 클라이언트 SDK 5 구성 도구 섹션을 참조하세요.

PKCS #11 library
Linux용 클라이언트 SDK 5를 사용하여 TLS 클라이언트-HSM 상호 인증을 위한 사용자 지정 인증서 및 키를 사용하려면
  1. 키와 인증서를 적절한 디렉터리로 복사합니다.

    $ sudo cp ssl-client.pem /opt/cloudhsm/etc $ sudo cp ssl-client.key /opt/cloudhsm/etc
  2. 구성 도구를 사용하여 ssl-client.pemssl-client.key을 지정합니다.

    $ sudo /opt/cloudhsm/bin/configure-pkcs11 \ --client-cert-hsm-tls-file /opt/cloudhsm/etc/ssl-client.pem \ --client-key-hsm-tls-file /opt/cloudhsm/etc/ssl-client.key
Windows용 클라이언트 SDK 5를 사용하여 TLS 클라이언트-HSM 상호 인증에 사용자 지정 인증서 및 키를 사용하려면
  1. 키와 인증서를 적절한 디렉터리로 복사합니다.

    cp ssl-client.pem C:\ProgramData\Amazon\CloudHSM\ssl-client.pem cp ssl-client.key C:\ProgramData\Amazon\CloudHSM\ssl-client.key
  2. PowerShell 인터프리터를 사용하는 경우 구성 도구를 사용하여 ssl-client.pemssl-client.key을 지정합니다.

    & "C:\Program Files\Amazon\CloudHSM\bin\configure-pkcs11.exe" ` --client-cert-hsm-tls-file C:\ProgramData\Amazon\CloudHSM\ssl-client.pem ` --client-key-hsm-tls-file C:\ProgramData\Amazon\CloudHSM\ssl-client.key
OpenSSL Dynamic Engine
Linux용 클라이언트 SDK 5를 사용하여 TLS 클라이언트-HSM 상호 인증을 위한 사용자 지정 인증서 및 키를 사용하려면
  1. 키와 인증서를 적절한 디렉터리로 복사합니다.

    $ sudo cp ssl-client.pem /opt/cloudhsm/etc sudo cp ssl-client.key /opt/cloudhsm/etc
  2. 구성 도구를 사용하여 ssl-client.pemssl-client.key을 지정합니다.

    $ sudo /opt/cloudhsm/bin/configure-dyn \ --client-cert-hsm-tls-file /opt/cloudhsm/etc/ssl-client.pem \ --client-key-hsm-tls-file /opt/cloudhsm/etc/ssl-client.key
JCE provider
Linux용 클라이언트 SDK 5를 사용하여 TLS 클라이언트-HSM 상호 인증을 위한 사용자 지정 인증서 및 키를 사용하려면
  1. 키와 인증서를 적절한 디렉터리로 복사합니다.

    $ sudo cp ssl-client.pem /opt/cloudhsm/etc sudo cp ssl-client.key /opt/cloudhsm/etc
  2. 구성 도구를 사용하여 ssl-client.pemssl-client.key을 지정합니다.

    $ sudo /opt/cloudhsm/bin/configure-jce \ --client-cert-hsm-tls-file /opt/cloudhsm/etc/ssl-client.pem \ --client-key-hsm-tls-file /opt/cloudhsm/etc/ssl-client.key
Windows용 클라이언트 SDK 5를 사용하여 TLS 클라이언트-HSM 상호 인증에 사용자 지정 인증서 및 키를 사용하려면
  1. 키와 인증서를 적절한 디렉터리로 복사합니다.

    cp ssl-client.pem C:\ProgramData\Amazon\CloudHSM\ssl-client.pem cp ssl-client.key C:\ProgramData\Amazon\CloudHSM\ssl-client.key
  2. PowerShell 인터프리터를 사용하는 경우 구성 도구를 사용하여 ssl-client.pemssl-client.key을 지정합니다.

    & "C:\Program Files\Amazon\CloudHSM\bin\configure-jce.exe" ` --client-cert-hsm-tls-file C:\ProgramData\Amazon\CloudHSM\ssl-client.pem ` --client-key-hsm-tls-file C:\ProgramData\Amazon\CloudHSM\ssl-client.key
CloudHSM CLI
Linux용 클라이언트 SDK 5를 사용하여 TLS 클라이언트-HSM 상호 인증을 위한 사용자 지정 인증서 및 키를 사용하려면
  1. 키와 인증서를 적절한 디렉터리로 복사합니다.

    $ sudo cp ssl-client.pem /opt/cloudhsm/etc sudo cp ssl-client.key /opt/cloudhsm/etc
  2. 구성 도구를 사용하여 ssl-client.pemssl-client.key을 지정합니다.

    $ sudo /opt/cloudhsm/bin/configure-cli \ --client-cert-hsm-tls-file /opt/cloudhsm/etc/ssl-client.pem \ --client-key-hsm-tls-file /opt/cloudhsm/etc/ssl-client.key
Windows용 클라이언트 SDK 5를 사용하여 TLS 클라이언트-HSM 상호 인증에 사용자 지정 인증서 및 키를 사용하려면
  1. 키와 인증서를 적절한 디렉터리로 복사합니다.

    cp ssl-client.pem C:\ProgramData\Amazon\CloudHSM\ssl-client.pem cp ssl-client.key C:\ProgramData\Amazon\CloudHSM\ssl-client.key
  2. PowerShell 인터프리터를 사용하는 경우 구성 도구를 사용하여 ssl-client.pemssl-client.key을 지정합니다.

    & "C:\Program Files\Amazon\CloudHSM\bin\configure-cli.exe" ` --client-cert-hsm-tls-file C:\ProgramData\Amazon\CloudHSM\ssl-client.pem ` --client-key-hsm-tls-file C:\ProgramData\Amazon\CloudHSM\ssl-client.key

단계 3. AWS CloudHSM용 mTLS 적용 설정

클라이언트 SDK 5 구성 도구를 사용하여 구성한 후 클라이언트와 AWS CloudHSM 간의 연결은 클러스터의 상호 TLS가 됩니다. 하지만 구성 파일에서 프라이빗 키 경로와 클라이언트 인증서 체인 경로를 제거하면 연결이 다시 일반 TLS로 전환됩니다. CloudHSM CLI를 사용하여 다음 단계를 완료하여 클러스터에서 mtls 적용을 설정할 수 있습니다.

  1. 다음 명령을 사용하여 CloudHSM CLI를 시작합니다.

    Linux
    $ /opt/cloudhsm/bin/cloudhsm-cli interactive
    Windows
    C:\Program Files\Amazon\CloudHSM\bin\> .\cloudhsm-cli.exe interactive
  2. CloudHSM CLI를 사용하여 관리자로 로그인합니다.

    aws-cloudhsm > login --username admin --role admin Enter password: { "error_code": 0, "data": { "username": "admin", "role": "admin" } }
    참고

    1. CloudHSM CLI를 구성했는지 확인하고 mTLS 연결에서 CloudHSM CLI를 시작합니다.

    2. mTLS 적용을 설정하기 전에 사용자 이름을 admin으로 사용하여 기본 관리자로 로그인해야 합니다.

  3. CloudHSM CLI를 사용하여 mTLS 적용 수준 설정 명령을 사용하여 적용을 설정합니다. 자세한 내용은 다음 예제를 참조하거나 help cluster mtls set-enforcement 명령을 사용하십시오.

    예 – AWS CloudHSM 클러스터를 사용하여 mTLS 적용 설정

    다음 예제에서는 CloudHSM CLI에서 cluster mtls set-enforcement 명령을 사용하여 HSM로 mTLS 적용을 설정하는 방법을 보여줍니다. 이 명령을 사용하려면 사용자 이름이 admin인 관리자가 HSM에 로그인되어 있어야 합니다.

    aws-cloudhsm > cluster mtls set-enforcement --level cluster { "error_code": 0, "data": { "message": "Mtls enforcement level set to Cluster successfully" } }
    주의

    클러스터에서 mTLS 사용을 적용하면 기존에 존재하지 않는 모든 연결이 끊어지고 mTLS 인증서가 있는 클러스터에만 연결할 수 있습니다.