

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

# AWS CloudHSM 클라이언트 SDK 3용 JCE 공급자 설치
<a name="java-library-install"></a>

JCE 공급자를 사용하려면 먼저 AWS CloudHSM 클라이언트가 필요합니다.

클라이언트는 클러스터에서 HSM과의 종단 간 암호화 통신을 설정하는 데몬입니다. JCE 공급자는 클라이언트와 로컬로 통신합니다. AWS CloudHSM 클라이언트 패키지를 설치 및 구성하지 않은 경우의 단계에 따라 지금 구성합니다[클라이언트 설치(Linux)](cmu-install-and-configure-client-linux.md). 클라이언트를 설치 및 구성한 후 다음 명령을 사용하여 시작합니다.

JCE 공급자는 Linux 및 호환 운영 체제에서만 지원됩니다.

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

```
$ sudo start cloudhsm-client
```

------
#### [ Amazon Linux 2 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ CentOS 7 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ CentOS 8 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ RHEL 7 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ RHEL 8 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ Ubuntu 16.04 LTS ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ Ubuntu 18.04 LTS ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ Ubuntu 20.04 LTS ]

```
$ sudo systemctl start cloudhsm-client
```

------

다음 섹션을 사용하여 보안 인증 정보를 설치, 검증하고 공급자에 제공합니다.

**Topics**
+ [1단계: JCE 공급자 설치](#install-java-library)
+ [2단계: 설치 검증](#validate-install)
+ [3단계: JCE 공급자에게 자격 증명 제공](#java-library-credentials)

## 1단계: JCE 공급자 설치
<a name="install-java-library"></a>

다음 명령을 사용하여 JCE 공급자를 다운로드하고 설치합니다. 이 공급자는 Linux 및 호환 운영 체제에서만 지원됩니다.

**참고**  
업그레이드에 대한 자세한 내용은 [클라이언트 SDK 3 업그레이드](client-upgrade.md) 단원을 참조하십시오.

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

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL6/cloudhsm-client-jce-latest.el6.x86_64.rpm
```

```
$ sudo yum install ./cloudhsm-client-jce-latest.el6.x86_64.rpm
```

------
#### [ Amazon Linux 2 ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL7/cloudhsm-client-jce-latest.el7.x86_64.rpm
```

```
$ sudo yum install ./cloudhsm-client-jce-latest.el7.x86_64.rpm
```

------
#### [ CentOS 7 ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL7/cloudhsm-client-jce-latest.el7.x86_64.rpm
```

```
$ sudo yum install ./cloudhsm-client-jce-latest.el7.x86_64.rpm
```

------
#### [ CentOS 8 ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL8/cloudhsm-client-jce-latest.el8.x86_64.rpm
```

```
$ sudo yum install ./cloudhsm-client-jce-latest.el8.x86_64.rpm
```

------
#### [ RHEL 7 ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL7/cloudhsm-client-jce-latest.el7.x86_64.rpm
```

```
$ sudo yum install ./cloudhsm-client-jce-latest.el7.x86_64.rpm
```

------
#### [ RHEL 8 ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL8/cloudhsm-client-jce-latest.el8.x86_64.rpm
```

```
$ sudo yum install ./cloudhsm-client-jce-latest.el8.x86_64.rpm
```

------
#### [ Ubuntu 16.04 LTS ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Xenial/cloudhsm-client-jce_latest_amd64.deb
```

```
$ sudo apt install ./cloudhsm-client-jce_latest_amd64.deb
```

------
#### [ Ubuntu 18.04 LTS ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Bionic/cloudhsm-client-jce_latest_u18.04_amd64.deb
```

```
$ sudo apt install ./cloudhsm-client-jce_latest_u18.04_amd64.deb
```

------

앞의 명령을 실행하면 다음과 같은 JCE 공급자 파일을 찾을 수 있습니다.
+ `/opt/cloudhsm/java/cloudhsm-<version>.jar`
+ `/opt/cloudhsm/java/cloudhsm-test-<version>.jar`
+ `/opt/cloudhsm/java/hamcrest-all-1.3.jar`
+ `/opt/cloudhsm/java/junit.jar`
+ `/opt/cloudhsm/java/log4j-api-2.17.1.jar`
+ `/opt/cloudhsm/java/log4j-core-2.17.1.jar`
+ `/opt/cloudhsm/lib/libcaviumjca.so`

## 2단계: 설치 검증
<a name="validate-install"></a>

HSM에서 기본 작업을 수행하여 설치를 검증합니다.

**JCE 공급자 설치를 확인하려면**

1. (선택 사항) 환경에 Java가 아직 설치되어 있지 않은 경우 다음 명령을 사용하여 설치합니다.

------
#### [ Linux (and compatible libraries) ]

   ```
   $ sudo yum install java-1.8.0-openjdk
   ```

------
#### [ Ubuntu ]

   ```
   $ sudo apt-get install openjdk-8-jre
   ```

------

1. 다음 명령을 사용하여 필요한 환경 변수를 설정합니다. *<HSM user name>* 및 *<password>*를 CU(Crypto User)의 자격 증명으로 바꿉니다.

   ```
   $ export LD_LIBRARY_PATH=/opt/cloudhsm/lib
   ```

   ```
   $ export HSM_PARTITION=PARTITION_1
   ```

   ```
   $ export HSM_USER=<HSM user name>
   ```

   ```
   $ export HSM_PASSWORD=<password>
   ```

1. 다음 명령을 사용하여 기본 기능 테스트를 실행합니다. 성공하면 명령이 다음과 비슷하게 출력됩니다.

   ```
   $ java8 -classpath "/opt/cloudhsm/java/*" org.junit.runner.JUnitCore TestBasicFunctionality
   
   JUnit version 4.11
   .2018-08-20 17:53:48,514 DEBUG [main] TestBasicFunctionality (TestBasicFunctionality.java:33) - Adding provider.
   2018-08-20 17:53:48,612 DEBUG [main] TestBasicFunctionality (TestBasicFunctionality.java:42) - Logging in.
   2018-08-20 17:53:48,612 INFO [main] cfm2.LoginManager (LoginManager.java:104) - Looking for credentials in HsmCredentials.properties
   2018-08-20 17:53:48,612 INFO [main] cfm2.LoginManager (LoginManager.java:122) - Looking for credentials in System.properties
   2018-08-20 17:53:48,613 INFO [main] cfm2.LoginManager (LoginManager.java:130) - Looking for credentials in System.env
    SDK Version: 2.03
   2018-08-20 17:53:48,655 DEBUG [main] TestBasicFunctionality (TestBasicFunctionality.java:54) - Generating AES Key with key size 256.
   2018-08-20 17:53:48,698 DEBUG [main] TestBasicFunctionality (TestBasicFunctionality.java:63) - Encrypting with AES Key.
   2018-08-20 17:53:48,705 DEBUG [main] TestBasicFunctionality (TestBasicFunctionality.java:84) - Deleting AES Key.
   2018-08-20 17:53:48,707 DEBUG [main] TestBasicFunctionality (TestBasicFunctionality.java:92) - Logging out.
   
   Time: 0.205
   
   OK (1 test)
   ```

## 3단계: JCE 공급자에게 자격 증명 제공
<a name="java-library-credentials"></a>

애플리케이션에서 인증서를 사용하려면 먼저 HSM이 Java 애플리케이션을 인증해야 합니다. 애플리케이션마다 한 세션을 사용할 수 있습니다. HSM이 명시적 로그인이나 암시적 로그인 방법을 사용하여 세션을 인증합니다.

**명시적 로그인** – 이 메소드를 사용하면 애플리케이션에서 직접 CloudHSM 자격 증명을 제공할 수 있습니다. `LoginManager.login()` 메서드가 사용됩니다. 이때 CU 사용자 이름, 암호 및 HSM 파티션 ID를 전달합니다. 명시적 로그인 방법 사용에 대한 자세한 내용은 [Login to an HSM](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/master/src/main/java/com/amazonaws/cloudhsm/examples/LoginRunner.java) 코드 예제를 참조하십시오.

**암시적 로그인** - 이 메서드를 사용하면 새 속성 파일, 시스템 속성 또는 환경 변수로 CloudHSM 자격 증명을 설정할 수 있습니다.
+ **새 속성 파일** - `HsmCredentials.properties`라는 이름의 새 파일을 생성하고 애플리케이션의 `CLASSPATH`에 추가합니다. 파일에 다음을 포함해야 합니다.

  ```
  HSM_PARTITION = PARTITION_1
  HSM_USER = <HSM user name>
  HSM_PASSWORD = <password>
  ```
+ **시스템 속성** – 애플리케이션을 실행할 때 시스템 속성을 통해 자격 증명을 설정합니다. 다음 예제와 같이 이 작업을 두 가지 방법으로 수행할 수 있습니다.

  ```
  $ java -DHSM_PARTITION=PARTITION_1 -DHSM_USER=<HSM user name> -DHSM_PASSWORD=<password>
  ```

  ```
  System.setProperty("HSM_PARTITION","PARTITION_1");
  System.setProperty("HSM_USER","<HSM user name>");
  System.setProperty("HSM_PASSWORD","<password>");
  ```
+ **환경 변수** – 자격 증명을 환경 변수로 설정합니다.

  ```
  $ export HSM_PARTITION=PARTITION_1
  $ export HSM_USER=<HSM user name>
  $ export HSM_PASSWORD=<password>
  ```

애플리케이션이 자격 증명을 제공하지 않거나 HSM이 세션을 인증하기 전에 작업을 시도하면 자격 증명을 사용할 수 없기도 합니다. 이러한 경우 Java용 CloudHSM 소프트웨어 라이브러리가 다음 순서로 자격 증명을 검색합니다.

1. `HsmCredentials.properties`

1. 시스템 속성

1. 환경 변수

**오류 처리**  
암시적 로그인 방법보다 명시적 로그인 방법에서 오류 처리가 더 쉽습니다. `LoginManager` 클래스를 사용하면 애플리케이션이 오류를 처리하는 방법을 더 세부적으로 제어할 수 있습니다. 암시적 로그인 방법을 사용하면 자격 증명이 잘못되거나 HSM의 세션 인증에 문제가 있을 때 오류 처리에서 이해하기 어려워집니다.