

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

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

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

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

**Topics**
+ [사전 조건](keystore-prerequisites_5.md)
+ [Keytool과 함께 키 스토어 사용](using_keystore_with_keytool_5.md)
+ [Jarsigner와 함께 키 스토어 사용](using_keystore_jarsigner_5.md)
+ [알려진 문제](known-issues-keytool-jarsigner_5.md)

# 클라이언트 SDK 5를 사용하여 Java Keytool 및 Jarsigner AWS CloudHSM 와 통합하기 위한 사전 조건
사전 조건

 AWS CloudHSM 키 스토어를 사용하려면 먼저 AWS CloudHSM JCE SDK를 초기화하고 구성해야 합니다. 이렇게 하려면 다음의 절차를 따르세요.

## 1단계: JCE 설치


 AWS CloudHSM 클라이언트 사전 조건을 포함하여 JCE를 설치하려면 [Java 라이브러리 설치](java-library-install_5.md) 단계를 따릅니다.

## 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 키 스토어 사용에](alternative-keystore_5.md) 대한 문서를 참조하세요.

## 3 단계: JCE 공급자 등록


Java CloudProvider 구성에서 JCE 공급자를 등록하려면 다음 단계를 수행합니다.

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

1. `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` 명령줄 옵션을 지정하면 오류가 발생할 수 있습니다.

# 클라이언트 SDK 5를 사용하여 AWS CloudHSM keytool과 함께 키 스토어 사용
Keytool과 함께 키 스토어 사용

 [Keytool](https://docs.oracle.com/javase/8/docs/technotes/tools/unix/keytool.html)은 공통 키 및 인증서 태스크를 위한 널리 사용되는 명령줄 유틸리티입니다. Keytool에 대한 전체 자습서는 AWS CloudHSM 설명서의 범위를 벗어납니다. 이 문서에서는를 키 스토어를 통해 신뢰의 루트 AWS CloudHSM 로 사용할 때 다양한 AWS CloudHSM 키 도구 함수와 함께 사용해야 하는 특정 파라미터에 대해 설명합니다.

키 스토어와 함께 AWS CloudHSM keytool을 사용하는 경우 모든 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 클라이언트 SDK 3용 AWS CloudHSM KeyStore 사용](alternative-keystore.md#using_cloudhsm_keystore). 기존 키 스토어를 사용하려면 keytool에 대한 keystore 인수를 사용하여 이름(경로 포함)을 지정합니다. keytool 명령에서 존재하지 않는 키 스토어 파일을 지정하면 AWS CloudHSM 키 스토어가 새 키 스토어 파일을 생성합니다.

# 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을 사용하여 AWS CloudHSM CSR 생성](generate_csr_using_keytool_5.md)에서 설명한 대로 Java 애플리케이션을 실행해야 합니다. 또는, 한 클라이언트에서 필요한 사항을 변경하고 결과 키 스토어 파일을 다른 모든 클라이언트 인스턴스에 복사할 수 있습니다.

**예제 1:** 대칭 AES-256 키를 생성하고 작업 디렉터리에서 이름이 "example\$1keystore.store"인 키 저장소 파일에 저장하려면. *<secret label>*을 고유한 레이블로 바꿉니다.

------
#### [ Linux ]

```
$ keytool -genseckey -alias <secret label> -keyalg aes \
	-keysize 256 -keystore example_keystore.store \
	-storetype CloudHSM -J-classpath '-J/opt/cloudhsm/java/*' \
```

------
#### [ Windows ]

```
PS C:\> keytool -genseckey -alias <secret label> -keyalg aes `
	-keysize 256 -keystore example_keystore.store `
	-storetype CloudHSM -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'
```

------

**예제 2:** RSA 2048 키 페어를 생성하고 작업 디렉터리에서 이름이 "example\$1keystore.store"인 키 저장소 파일에 저장하려면. <RSA key pair label>고유** 라벨로 교체하십시오.

------
#### [ Linux ]

```
$ keytool -genkeypair -alias <RSA key pair label> \
	-keyalg rsa -keysize 2048 \
	-sigalg sha512withrsa \
	-keystore example_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 example_keystore.store `
	-storetype CLOUDHSM `
	-J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'
```

------

Java 라이브러리에서 [지원되는 서명 알고리즘](java-lib-supported_5.md#java-sign-verify_5)의 목록을 찾을 수 있습니다.

# keytool을 사용하여 AWS CloudHSM 키 삭제
Keytool을 사용하여 키 삭제하기

 AWS CloudHSM 키 스토어는 키 삭제를 지원하지 않습니다. [Destroyable 인터페이스](https://devdocs.io/openjdk%7E8/javax/security/auth/destroyable#destroy--)의 destroy 메서드를 사용하여 키를 삭제할 수 있습니다.

```
((Destroyable) key).destroy();
```

# keytool을 사용하여 AWS CloudHSM CSR 생성
Keytool을 사용하여 CSR 생성하기

[AWS CloudHSM 클라이언트 SDK 5용 OpenSSL Dynamic Engine](openssl-library.md)를 사용하는 경우 가장 유연하게 인증서 서명 요청(CSR)을 생성할 수 있습니다. 다음 명령은 keytool을 사용하여 별칭이 있는 키 페어, `example-key-pair`에 대한 CSR을 생성합니다.

------
#### [ Linux ]

```
$ keytool -certreq -alias <key pair label> \
	-file my_csr.csr \
	-keystore example_keystore.store \
	-storetype CLOUDHSM \
	-J-classpath '-J/opt/cloudhsm/java/*'
```

------
#### [ Windows ]

```
PS C:\> keytool -certreq -alias <key pair label> `
	-file my_csr.csr `
	-keystore example_keystore.store `
	-storetype CLOUDHSM `
	-J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'
```

------

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

# keytool을 사용하여 중간 및 루트 인증서를 AWS CloudHSM 키 스토어로 가져오기
Keytool을 사용하여 인증서를 키 스토어로 가져오기

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

------
#### [ Linux ]

```
$ keytool -import -trustcacerts -alias rootCAcert \
	-file rootCAcert.cert -keystore example_keystore.store \
	-storetype CLOUDHSM \
	-J-classpath '-J/opt/cloudhsm/java/*'
```

------
#### [ Windows ]

```
PS C:\> keytool -import -trustcacerts -alias rootCAcert `
	-file rootCAcert.cert -keystore example_keystore.store `
	-storetype CLOUDHSM `
	-J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'
```

------

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

# keytool을 사용하여 AWS CloudHSM 키 스토어에서 인증서 삭제
Keytool을 사용하여 키 스토어에서 인증서 삭제

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

------
#### [ Linux ]

```
$ keytool -delete -alias mydomain \
	-keystore example_keystore.store \
	-storetype CLOUDHSM \
	-J-classpath '-J/opt/cloudhsm/java/*'
```

------
#### [ Windows ]

```
PS C:\> keytool -delete -alias mydomain `
	-keystore example_keystore.store `
	-storetype CLOUDHSM `
	-J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'
```

------

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

# AWS CloudHSM keytool을 사용하여 키 스토어로 작업 인증서 가져오기
Keytool을 사용하여 작업 인증서를 키 스토어로 가져오기

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

------
#### [ Linux ]

```
$ keytool -importcert -noprompt -alias <key pair label> \
	-file my_certificate.crt \
	-keystore example_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 example_keystore.store `
	-storetype CLOUDHSM `
	-J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'
```

------

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

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

# keytool을 AWS CloudHSM 사용하여에서 인증서 내보내기
Keytool을 사용하여 인증서 내보내기

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

------
#### [ Linux ]

```
$ keytool -exportcert -alias <key pair label> \
	-file my_exported_certificate.crt \
	-keystore example_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 example_keystore.store `
	-storetype CLOUDHSM `
	-J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'
```

------

# 클라이언트 SDK 5를 사용하여 Jarsigner에서 AWS CloudHSM 키 스토어 사용
Jarsigner와 함께 키 스토어 사용

Jarsigner는 하드웨어 보안 모듈(HSM)에 안전하게 저장된 키를 사용하여 JAR 파일에 서명하기 위해 널리 사용되는 명령줄 유틸리티입니다. Jarsigner에 대한 전체 자습서는 AWS CloudHSM 설명서의 범위를 벗어납니다. 이 섹션에서는 AWS CloudHSM 키 스토어를 통해 신뢰의 루트 AWS CloudHSM 로를 사용하여 서명에 서명하고 확인하는 데 사용해야 하는 Jarsigner 파라미터에 대해 설명합니다.

# Jarsigner를 사용하여 AWS CloudHSM 키 및 인증서 설정
키 및 인증서 설정

Jarsigner로 AWS CloudHSM JAR 파일에 서명하려면 먼저 다음 단계를 설정하거나 완료해야 합니다.

1. [AWS CloudHSM 키 스토어 사전 조건](keystore-prerequisites_5.md)의 지침을 따릅니다.

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

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

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

다음 명령을 사용하여 AWS CloudHSM 및 Jarsigner를 사용하여 JAR 파일에 서명합니다.

------
#### [ Linux; ]

OpenJDK 8의 경우

```
jarsigner -keystore example_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 example_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 example_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 example_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 example_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 example_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 example_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 example_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>
```

------

# 클라이언트 SDK 5를 사용한 AWS CloudHSM 통합 Java Keytool 및 Jarsigner에 대해 알려진 문제
알려진 문제

다음 목록은 클라이언트 SDK 5를 사용하는 AWS CloudHSM 및 Java Keytool 및 Jarsigner와의 통합에 대해 알려진 문제의 현재 목록을 제공합니다.

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