

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

# 클라이언트 SDK 5용AWS CloudHSM KeyStore Java 클래스
<a name="alternative-keystore_5"></a>

클래스는 AWS CloudHSM `KeyStore` 특수 목적의 PKCS12 키 스토어를 제공합니다. 이 키 스토어는 키 데이터와 함께 인증서를 저장하고 AWS CloudHSM에 저장된 키 데이터와 상호 연관시킬 수 있습니다. `KeyStore` 클래스는 AWS CloudHSM Java 암호화 확장(JCE)의 `KeyStore` 서비스 공급자 인터페이스(SPI)를 구현합니다. `KeyStore` 사용에 대한 자세한 내용은 [Class KeyStore](https://devdocs.io/openjdk~8/java/security/keystore)를 참조하십시오.

**참고**  
인증서는 퍼블릭 정보이므로 암호화 키의 스토리지 용량을 최대화하기 위해 AWS CloudHSM 는 HSMs에 인증서 저장을 지원하지 않습니다.

## AWS CloudHSM 클라이언트 SDK 5에 적합한 키 스토어 선택
<a name="choosing_keystore_5"></a>

 AWS CloudHSM Java 암호화 확장(JCE) 공급자는 특수 용도의 AWS CloudHSM KeyStore를 제공합니다. 클래스는 AWS CloudHSM `KeyStore` HSM으로 키 작업 오프로드, 인증서의 로컬 스토리지 및 인증서 기반 작업을 지원합니다.

다음과 같이 특수 용도의 CloudHSM KeyStore를 로드합니다.

```
KeyStore ks = KeyStore.getInstance("CloudHSM")
```

## AWS CloudHSM KeyStore 클라이언트 SDK 5 초기화
<a name="initialize_cloudhsm_keystore_5"></a>

JCE 공급자에 로그인하는 것과 동일한 방식으로 AWS CloudHSM KeyStore에 로그인합니다. 환경 변수 또는 시스템 속성 파일을 사용할 수 있으며 CloudHSM KeyStore의 사용을 시작하기 전에 로그인해야 합니다. JCE 공급자를 사용하여 HSM에 로그인하는 예는 [HSM에 로그인](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/LoginRunner.java)을 참조하십시오.

원하는 경우, 암호를 지정하여 키 스토어 데이터를 보유하는 로컬 PKCS12 파일을 암호화할 수 있습니다. AWS CloudHSM Keystore를 생성할 때 암호를 설정하고 로드를 사용할 때 암호를 제공하고 메서드를 설정하고 가져옵니다.

다음과 같이 새 CloudHSM KeyStore 객체를 인스턴스화합니다.

```
ks.load(null, null);
```

`store` 메서드를 사용하여 파일에 키 스토어 데이터를 씁니다. 이 시점부터 다음과 같이 소스 파일 및 암호와 함께 `load` 메서드를 사용하여 기존 키 스토어를 로드할 수 있습니다.

```
ks.load(inputStream, password);
```

## Use AWS CloudHSM KeyStore 또는 AWS CloudHSM 클라이언트 SDK 5
<a name="using_cloudhsm_keystore_5"></a>

AWS CloudHSM KeyStore는 JCE [클래스 KeyStore](https://devdocs.io/openjdk~8/java/security/keystore) 사양을 준수하며 다음 함수를 제공합니다.
+ `load`

  지정된 입력 스트림에서 키 스토어를 로드합니다. 키 스토어를 저장할 때 암호가 설정된 경우, 로드가 성공하려면 이와 동일한 암호가 제공되어야 합니다. 새로운 빈 키 스토어를 초기화하려면 두 파라미터를 모두 null로 설정합니다.

  ```
  KeyStore ks = KeyStore.getInstance("CloudHSM");
  ks.load(inputStream, password);
  ```
+ `aliases`

  지정된 키 스토어 인스턴스에 있는 모든 항목의 별칭 이름의 열거를 반환합니다. 결과는 PKCS12 파일에 로컬로 저장된 객체와 HSM에 있는 객체를 포함합니다.

  **샘플 코드:**

  ```
  KeyStore ks = KeyStore.getInstance("CloudHSM");
  for(Enumeration<String> entry = ks.aliases(); entry.hasMoreElements();) {    
      String label = entry.nextElement();    
      System.out.println(label);
  }
  ```
+ `containsalias`

  키 스토어가 지정된 별칭이 있는 객체에 최소 하나 이상 액세스할 수 있는 경우 true를 반환합니다. 키 스토어는 PKCS12 파일에 로컬로 저장된 객체와 HSM에 상주하는 객체를 확인합니다.
+ `deleteEntry`

  로컬 PKCS12 파일에서 인증서 항목을 삭제합니다. HSM에 저장된 키 데이터 삭제는 AWS CloudHSM KeyStore를 사용하여 지원되지 않습니다. [Destroyable](https://devdocs.io/openjdk~8/javax/security/auth/destroyable#destroy--) 인터페이스의 `destroy` 방법을 사용하여 키를 삭제할 수 있습니다.

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

  사용 가능한 경우 별칭과 연결된 인증서를 반환합니다. 별칭이 없거나 인증서가 아닌 객체를 참조하는 경우, 함수는 NULL을 반환합니다.

  ```
  KeyStore ks = KeyStore.getInstance("CloudHSM");
  Certificate cert = ks.getCertificate(alias);
  ```
+ `getCertificateAlias`

  데이터가 지정된 인증서와 일치하는 첫 번째 키 스토어 항목의 이름(별칭)을 반환합니다.

  ```
  KeyStore ks = KeyStore.getInstance("CloudHSM");
  String alias = ks.getCertificateAlias(cert);
  ```
+ `getCertificateChain`

  지정된 별칭과 연결된 인증서 체인을 반환합니다. 별칭이 없거나 인증서가 아닌 객체를 참조하는 경우, 함수는 NULL을 반환합니다.
+ `getCreationDate`

  지정된 별칭에 의해 식별된 항목의 생성 날짜를 반환합니다. 생성 날짜를 사용할 수 없는 경우 함수는 인증서가 유효해지는 날짜를 반환합니다.
+ `getKey`

  GetKey는 HSM에 전달되고 지정된 레이블에 해당하는 키 객체를 반환합니다. `getKey`는 HSM을 직접 쿼리하므로, KeyStore에 의해 생성되었는지 여부에 관계없이 HSM의 어떤 키에 대해서도 사용할 수 있습니다.

  ```
  Key key = ks.getKey(keyLabel, null);
  ```
+ `isCertificateEntry`

  지정된 별칭이 있는 항목이 인증서 항목을 나타내는지 확인합니다.
+ `isKeyEntry`

  지정된 별칭이 있는 항목이 키 항목을 나타내는지 확인합니다. 이 작업은 PKCS12 파일과 HSM에서 모두 별칭을 검색합니다.
+ `setCertificateEntry`

  지정된 인증서를 지정된 별칭에 할당합니다. 지정된 별칭이 키 또는 인증서를 식별하는 데 이미 사용 중인 경우 `KeyStoreException`이 발생합니다. JCE 코드를 사용하여 키 객체를 가져온 다음 KeyStore `SetKeyEntry` 메서드를 사용하여 인증서를 키에 연결할 수 있습니다.
+ `byte[]` 키가 있는 `setKeyEntry`

  **이 API는 현재 클라이언트 SDK 5에서 지원되지 않습니다.**
+ `Key` 객체가 있는 `setKeyEntry`

  지정된 키를 지정된 별칭에 할당하고 HSM 내부에 저장합니다. 키가 HSM 내에 아직 없는 경우 추출 가능한 세션 키로서 HSM에 가져옵니다.

  `Key` 객체가 `PrivateKey` 유형인 경우 해당 인증서 체인이 함께 제공되어야 합니다.

  별칭이 이미 존재하는 경우 `SetKeyEntry` 호출은 `KeyStoreException`을 발생시키고 키를 덮어쓰지 못하게 합니다. 키를 덮어써야 하는 경우 해당 목적으로 KMU 또는 JCE를 사용하십시오.
+ `engineSize`

  키 스토어의 항목 수를 반환합니다.
+ `store`

  키 스토어를 지정된 출력 스트림에 PKCS12 파일로 저장하고 지정된 암호로 보호합니다. 또한, 모든 로드된 키(`setKey` 호출을 사용하여 설정됨)를 유지합니다.