클라이언트 SDK 5를 사용하여 Java Keytool 및 Jarsigner와 통합 - AWS CloudHSM

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

클라이언트 SDK 5를 사용하여 Java Keytool 및 Jarsigner와 통합

AWS CloudHSM 키 저장소는 및 와 같은 타사 도구를 통해 HSM의 키와 연결된 인증서를 활용하는 특수 목적의 JCE 키 저장소입니다. keytool jarsigner AWS CloudHSM 인증서는 공개 비기밀 데이터이므로 HSM에 인증서를 저장하지 않습니다. AWS CloudHSM 키 스토어는 인증서를 로컬 파일에 저장하고 인증서를 HSM의 해당 키에 매핑합니다.

AWS CloudHSM 키 스토어를 사용하여 새 키를 생성하면 로컬 키 스토어 파일에 항목이 생성되지 않고 HSM에 키가 생성됩니다. 이와 비슷하게, AWS CloudHSM 키 스토어를 사용하여 키를 검색할 때 검색이 HSM에 전달됩니다. 인증서를 AWS CloudHSM 키 저장소에 저장하면 공급자가 해당 별칭이 있는 키 쌍이 HSM에 있는지 확인한 다음 제공된 인증서를 해당 키 쌍과 연결합니다.

필수 조건

AWS CloudHSM 키 스토어를 사용하려면 먼저 JCE SDK를 초기화하고 구성해야 합니다. AWS CloudHSM

1단계: JCE 설치

AWS CloudHSM 클라이언트 사전 요구 사항을 포함하여 JCE를 설치하려면 Java 라이브러리 설치 단계를 따르십시오.

2단계: 환경 변수에 HSM 로그인 자격 증명 추가

HSM 로그인 자격 증명을 포함하도록 환경 변수를 설정합니다.

Linux
$ export HSM_USER=<HSM user name>
$ export HSM_PASSWORD=<HSM password>
Windows
PS C:\> $Env:HSM_USER=<HSM user name>
PS C:\> $Env:HSM_PASSWORD=<HSM password>
참고

AWS CloudHSM JCE는 다양한 로그인 옵션을 제공합니다. 타사 애플리케이션에서 AWS CloudHSM 키 저장소를 사용하려면 환경 변수와 함께 암시적 로그인을 사용해야 합니다. 애플리케이션 코드를 통한 명시적 로그인을 사용하려면 AWS CloudHSM 키 스토어를 사용하여 자체 애플리케이션을 빌드해야 합니다. 자세한 내용은 AWS CloudHSM 키 스토어 사용 문서를 참조하십시오.

3 단계: JCE 공급자 등록

Java CloudProvider 구성에서 JCE 제공자를 등록하려면 다음 단계를 따르십시오.

  1. Java 설치에서 java.security 구성 파일을 열어 편집합니다.

  2. java.security 구성 파일에서 com.amazonaws.cloudhsm.jce.provider.CloudHsmProvider을 마지막 공급자로 추가합니다. 예를 들어, java.security 파일에 9개의 공급자가 있는 경우 섹션의 마지막 공급자로 다음 공급자를 추가합니다.

    security.provider.10=com.amazonaws.cloudhsm.jce.provider.CloudHsmProvider

참고

AWS CloudHSM 제공자를 더 높은 우선 순위로 추가하면 소프트웨어로 안전하게 오프로드될 수 있는 작업에 대해 AWS CloudHSM 제공자의 우선 순위가 지정되므로 시스템 성능에 부정적인 영향을 미칠 수 있습니다. 가장 좋은 방법은 운영 공급자이든 소프트웨어 기반 공급자이든 관계없이 항상 작업에 사용할 공급자를 지정하는 것입니다. AWS CloudHSM

참고

AWS CloudHSM 키 스토어와 함께 keytool을 사용하여 키를 생성할 때 -providerName, -providerclass-providerpath 명령줄 옵션을 지정하면 오류가 발생할 수 있습니다.

keytool과 함께 AWS CloudHSM 키 스토어 사용하기

Keytool은 공통 키 및 인증서 태스크를 위한 널리 사용되는 명령줄 유틸리티입니다. Keytool에 대한 전체 자습서는 AWS CloudHSM 설명서의 범위를 벗어납니다. 이 문서에서는 키 저장소를 통해 신뢰 AWS CloudHSM 루트로 활용할 때 다양한 키 도구 함수와 함께 사용해야 하는 특정 파라미터에 대해 AWS CloudHSM 설명합니다.

키 저장소와 함께 keytool을 AWS CloudHSM 사용하는 경우 모든 keytool 명령에 다음 인수를 지정하십시오.

Linux
-storetype CLOUDHSM -J-classpath< '-J/opt/cloudhsm/java/*'>
Windows
-storetype CLOUDHSM -J-classpath<'-J"C:\Program Files\Amazon\CloudHSM\java\*"'>

키 저장소를 사용하여 AWS CloudHSM 새 키 저장소 파일을 생성하려면 을 참조하십시오. 사용 AWS CloudHSM KeyStore 기존 키 스토어를 사용하려면 keytool에 대한 keystore 인수를 사용하여 이름(경로 포함)을 지정합니다. keytool 명령에 존재하지 않는 키 스토어 파일을 지정하면 키 스토어가 새 AWS CloudHSM 키 스토어 파일을 생성합니다.

Keytool을 사용하여 새 키 생성

Keytool을 사용하여 AWS CloudHSM의 JCE SDK에서 지원하는 RSA, AES 및 DESede 유형의 키를 생성할 수 있습니다.

중요

keytool을 통해 생성된 키는 소프트웨어에서 생성된 다음 추출 AWS CloudHSM 가능한 영구 키로 가져옵니다.

Keytool 외부에서 내보낼 수 없는 키를 생성한 다음 해당 인증서를 키 스토어로 가져오는 것이 좋습니다. keytool과 Jarsigner를 통해 추출 가능한 RSA 또는 EC 키를 사용하는 경우 제공자는 에서 키를 내보낸 다음 로컬에서 키를 서명 AWS CloudHSM 작업에 사용합니다.

AWS CloudHSM 클러스터에 연결된 클라이언트 인스턴스가 여러 개 있는 경우 한 클라이언트 인스턴스의 키 저장소에서 인증서를 가져와도 다른 클라이언트 인스턴스에서 인증서를 자동으로 사용할 수 있는 것은 아니라는 점에 유의하십시오. 각 클라이언트 인스턴스에서 키 및 관련 인증서를 등록하려면 Keytool을 사용하여 CSR 생성하기에서 설명한 대로 Java 애플리케이션을 실행해야 합니다. 또는, 한 클라이언트에서 필요한 사항을 변경하고 결과 키 스토어 파일을 다른 모든 클라이언트 인스턴스에 복사할 수 있습니다.

예제 1: 레이블이 인 대칭 AES-256 키를 생성하고 작업 디렉터리에서 이름이 "my_keystore.store"인 키 스토어 파일에 저장하려면. <secret label>을 고유한 레이블로 바꾸십시오.

Linux
$ keytool -genseckey -alias <secret label> -keyalg aes \ -keysize 256 -keystore my_keystore.store \ -storetype CloudHSM -J-classpath '-J/opt/cloudhsm/java/*' \
Windows
PS C:\> keytool -genseckey -alias <secret label> -keyalg aes ` -keysize 256 -keystore my_keystore.store ` -storetype CloudHSM -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

예제 2: 레이블이 인 RSA 2048 키 페어를 생성하고 작업 디렉터리에서 이름이 “my_keystore.store”인 키 스토어 파일에 저장하려면. <RSA key pair label>고유 라벨로 교체하십시오.

Linux
$ keytool -genkeypair -alias <RSA key pair label> \ -keyalg rsa -keysize 2048 \ -sigalg sha512withrsa \ -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -genkeypair -alias <RSA key pair label> ` -keyalg rsa -keysize 2048 ` -sigalg sha512withrsa ` -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

Java 라이브러리에서 지원되는 서명 알고리즘의 목록을 찾을 수 있습니다.

Keytool을 사용하여 키 삭제하기

AWS CloudHSM 키 스토어는 키 삭제를 지원하지 않습니다. Destroyable 인터페이스의 destroy 메서드를 사용하여 키를 삭제할 수 있습니다.

((Destroyable) key).destroy();

Keytool을 사용하여 CSR 생성하기

OpenSSL Dynamic Engine를 사용하는 경우 가장 유연하게 인증서 서명 요청(CSR)을 생성할 수 있습니다. 다음 명령은 keytool을 사용하여 별칭이 있는 키 페어, my-key-pair에 대한 CSR을 생성합니다.

Linux
$ keytool -certreq -alias <key pair label> \ -file my_csr.csr \ -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -certreq -alias <key pair label> ` -file my_csr.csr ` -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'
참고

keytool의 키 페어를 사용하려면 해당 키 페어의 지정된 키 스토어 파일에 항목이 있어야 합니다. keytool 외부에서 생성된 키 페어를 사용하려면 키 및 인증서 메타데이터를 키 스토어로 가져와야 합니다. keystore 데이터를 가져오는 방법에 대한 지침은 keytool을 사용하여 중간 및 루트 인증서를 AWS CloudHSM 키 저장소로 가져오기 을 참조하십시오.

keytool을 사용하여 중간 및 루트 인증서를 AWS CloudHSM 키 저장소로 가져오기

CA 인증서를 가져오려면 새로 가져온 인증서에서 전체 인증서 체인의 검증을 활성화해야 합니다. 다음 명령은 예시를 나타냅니다.

Linux
$ keytool -import -trustcacerts -alias rootCAcert \ -file rootCAcert.cert -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -import -trustcacerts -alias rootCAcert ` -file rootCAcert.cert -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

AWS CloudHSM 클러스터에 여러 클라이언트 인스턴스를 연결하는 경우 한 클라이언트 인스턴스의 키 스토어에 있는 인증서를 가져와도 다른 클라이언트 인스턴스에서 인증서를 자동으로 사용할 수 없게 됩니다. 각 클라이언트 인스턴스에서 인증서를 가져와야 합니다.

keytool을 사용하여 키 저장소에서 AWS CloudHSM 인증서를 삭제합니다.

다음 명령은 Java keytool 키 스토어에서 인증서를 삭제하는 방법의 예를 보여줍니다.

Linux
$ keytool -delete -alias mydomain \ -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -delete -alias mydomain ` -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

AWS CloudHSM 클러스터에 여러 클라이언트 인스턴스를 연결하는 경우 한 클라이언트 인스턴스의 키 스토어에서 인증서를 삭제해도 다른 클라이언트 인스턴스에서 인증서가 자동으로 제거되지 않습니다. 각 클라이언트 인스턴스에서 인증서를 삭제해야 합니다.

keytool을 사용하여 작동 중인 인증서를 AWS CloudHSM 키 저장소로 가져오기

인증서 서명 요청(CSR)이 서명되면, 이를 AWS CloudHSM 키 스토어로 가져와서 적절한 키 페어와 연결할 수 있습니다. 다음 명령은 예시를 제공합니다.

Linux
$ keytool -importcert -noprompt -alias <key pair label> \ -file my_certificate.crt \ -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -importcert -noprompt -alias <key pair label> ` -file my_certificate.crt ` -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

별칭은 키 스토어에 연결된 인증서가 있는 키 페어여야 합니다. 키가 keytool 외부에서 생성되거나 다른 클라이언트 인스턴스에서 생성된 경우, 먼저 키 및 인증서 메타데이터를 키 스토어로 가져오기 해야 합니다.

인증서 체인은 검증 가능해야 합니다. 인증서를 검증할 수 없는 경우, 체인을 검증할 수 있도록 서명(인증 기관) 인증서를 키 스토어로 가져와야 할 수 있습니다.

Keytool을 사용하여 인증서 내보내기

다음 예에서는 이진수 X.509 형식으로 인증서를 생성합니다. 사람이 읽을 수 있는 인증서를 내보내려면 -rfc-exportcert 명령에 추가합니다.

Linux
$ keytool -exportcert -alias <key pair label> \ -file my_exported_certificate.crt \ -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -exportcert -alias <key pair label> ` -file my_exported_certificate.crt ` -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

Jarsigner와 함께 AWS CloudHSM 키 스토어 사용

Jarsigner는 HSM에 안전하게 저장된 키를 사용하여 JAR 파일에 서명하는 데 널리 사용되는 명령줄 유틸리티입니다. Jarsigner에 대한 전체 자습서는 AWS CloudHSM 설명서의 범위를 벗어납니다. 이 섹션에서는 키 저장소를 통해 신뢰 AWS CloudHSM 루트로 사용하여 서명을 서명하고 확인하는 데 사용해야 하는 Jarsigner 매개 변수에 대해 설명합니다. AWS CloudHSM

키 및 인증서 설정

Jarsigner를 사용하여 JAR 파일에 서명하기 전에 다음 단계를 설정 또는 완료했는지 확인하십시오.

  1. AWS CloudHSM 키 스토어 사전 조건의 지침을 따릅니다.

  2. 현재 서버 또는 클라이언트 인스턴스의 키 저장소에 저장해야 하는 서명 AWS CloudHSM 키와 관련 인증서 및 인증서 체인을 설정합니다. 에서 키를 생성한 다음 관련 메타데이터를 AWS CloudHSM 키 스토어로 가져옵니다. AWS CloudHSM keytool을 사용하여 키와 인증서를 설정하려면 Keytool을 사용하여 새 키 생성 단원을 참조하십시오. 여러 클라이언트 인스턴스를 사용하여 JAR에 서명하는 경우 키를 만들고 인증서 체인을 가져옵니다. 그런 다음 결과 키 스토어 파일을 각 클라이언트 인스턴스에 복사합니다. 새 키를 자주 생성하는 경우 인증서를 각 클라이언트 인스턴스에 개별적으로 가져오는 것이 더 쉬울 수 있습니다.

  3. 전체 인증서 체인이 검증 가능해야 합니다. 인증서 체인을 확인할 수 있으려면 CA 인증서와 중간 인증서를 AWS CloudHSM 키 저장소에 추가해야 할 수 있습니다. Java 코드를 사용하여 인증서 체인을 확인하는 지침은 AWS CloudHSM 및 Jarsigner를 사용하여 JAR 파일에 서명의 코드 조각을 참조하십시오. 원하는 경우 keytool을 사용하여 인증서를 가져올 수 있습니다. keytool을 사용하는 지침은 keytool을 사용하여 중간 및 루트 인증서를 AWS CloudHSM 키 저장소로 가져오기 을 참조하십시오.

AWS CloudHSM 및 Jarsigner를 사용하여 JAR 파일에 서명

JAR 파일에 서명하려면 다음 명령을 사용합니다.

Linux;

OpenJDK 8의 경우

jarsigner -keystore my_keystore.store \ -signedjar signthisclass_signed.jar \ -sigalg sha512withrsa \ -storetype CloudHSM \ -J-classpath '-J/opt/cloudhsm/java/*:/usr/lib/jvm/java-1.8.0/lib/tools.jar' \ -J-Djava.library.path=/opt/cloudhsm/lib \ signthisclass.jar <key pair label>

OpenJDK 11, OpenJDK 17 및 OpenJDK 21의 경우

jarsigner -keystore my_keystore.store \ -signedjar signthisclass_signed.jar \ -sigalg sha512withrsa \ -storetype CloudHSM \ -J-classpath '-J/opt/cloudhsm/java/*' \ -J-Djava.library.path=/opt/cloudhsm/lib \ signthisclass.jar <key pair label>
Windows

OpenJDK8의 경우

jarsigner -keystore my_keystore.store ` -signedjar signthisclass_signed.jar ` -sigalg sha512withrsa ` -storetype CloudHSM ` -J-classpath '-JC:\Program Files\Amazon\CloudHSM\java\*;C:\Program Files\Java\jdk1.8.0_331\lib\tools.jar' ` "-J-Djava.library.path='C:\Program Files\Amazon\CloudHSM\lib\'" ` signthisclass.jar <key pair label>

OpenJDK 11, OpenJDK 17 및 OpenJDK 21의 경우

jarsigner -keystore my_keystore.store ` -signedjar signthisclass_signed.jar ` -sigalg sha512withrsa ` -storetype CloudHSM ` -J-classpath '-JC:\Program Files\Amazon\CloudHSM\java\*'` "-J-Djava.library.path='C:\Program Files\Amazon\CloudHSM\lib\'" ` signthisclass.jar <key pair label>

서명된 JAR을 검증하려면 다음 명령을 사용합니다.

Linux

OpenJDK8의 경우

jarsigner -verify \ -keystore my_keystore.store \ -sigalg sha512withrsa \ -storetype CloudHSM \ -J-classpath '-J/opt/cloudhsm/java/*:/usr/lib/jvm/java-1.8.0/lib/tools.jar' \ -J-Djava.library.path=/opt/cloudhsm/lib \ signthisclass_signed.jar <key pair label>

OpenJDK 11, OpenJDK 17 및 OpenJDK 21의 경우

jarsigner -verify \ -keystore my_keystore.store \ -sigalg sha512withrsa \ -storetype CloudHSM \ -J-classpath '-J/opt/cloudhsm/java/*' \ -J-Djava.library.path=/opt/cloudhsm/lib \ signthisclass_signed.jar <key pair label>
Windows

OpenJDK 8의 경우

jarsigner -verify ` -keystore my_keystore.store ` -sigalg sha512withrsa ` -storetype CloudHSM ` -J-classpath '-JC:\Program Files\Amazon\CloudHSM\java\*;C:\Program Files\Java\jdk1.8.0_331\lib\tools.jar' ` "-J-Djava.library.path='C:\Program Files\Amazon\CloudHSM\lib\'" ` signthisclass_signed.jar <key pair label>

OpenJDK 11, OpenJDK 17 및 OpenJDK 21의 경우

jarsigner -verify ` -keystore my_keystore.store ` -sigalg sha512withrsa ` -storetype CloudHSM ` -J-classpath '-JC:\Program Files\Amazon\CloudHSM\java\*` "-J-Djava.library.path='C:\Program Files\Amazon\CloudHSM\lib\'" ` signthisclass_signed.jar <key pair label>

알려진 문제

  1. Keytool 및 Jarsigner에서는 EC 키를 지원하지 않습니다.