

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS CloudHSM JSSE で Tomcat を使用した Linux での SSL/TLS オフロード
<a name="third-offload-linux-jsse"></a>

このトピックでは、 AWS CloudHSM JCE SDK で Java Secure Socket Extension (JSSE) を使用して SSL/TLS オフロードを設定するstep-by-stepについて説明します。

**Topics**
+ [概要:](#third-offload-linux-jsse-overview)
+ [ステップ 1: 前提条件の設定](#third-offload-linux-jsse-prereqs)
+ [ステップ 2: プライベートキーと SSL/TLS 証明書を生成またはインポートする](#third-offload-linux-jsse-gen)
+ [ステップ 3: Tomcat ウェブサーバーを設定する](#third-offload-linux-jsse-config)
+ [ステップ 4: HTTPS トラフィックを有効にして証明書を検証する](#third-offload-linux-jsse-verify)

## 概要:
<a name="third-offload-linux-jsse-overview"></a>

 では AWS CloudHSM、Tomcat ウェブサーバーは Linux で HTTPS をサポートしています。 AWS CloudHSM JCE SDK には、JSSE (Java Secure Socket Extension) で使用できるインターフェイスが用意されており、このようなウェブサーバーで HSMs を使用できます。 AWS CloudHSM JCE は、JSSE を AWS CloudHSM クラスターに接続するブリッジです。JSSE は、Secure Socket Layer (SSL) と Transport Layer Security (TLS) プロトコル用の Java API です。

## ステップ 1: 前提条件の設定
<a name="third-offload-linux-jsse-prereqs"></a>

Linux で SSL/TLS オフロード AWS CloudHSM に で Tomcat ウェブサーバーを使用するには、次の前提条件に従います。クライアント SDK 5 と Tomcat ウェブサーバーでウェブサーバー SSL/TLS オフロードを設定するには、これらの前提条件を満たす必要があります。

**注記**  
プラットフォームごとに、異なる前提条件が必要です。使用しているプラットフォームに適したインストール手順を必ず実行してください。

### 前提条件
<a name="new-versions-jsse"></a>
+ Tomcat ウェブサーバーがインストールされた Linux オペレーティングシステムを実行する Amazon EC2 インスタンス。
+ HSM でこのウェブサーバーのプライベートキーを所有および管理する [Crypto User](understanding-users.md#crypto-user-chsm-cli) (CU)。
+ JCE for Client SDK 5 がインストールされ、設定されているハードウェアセキュリティモジュール (HSMs) が少なくとも 2 つあるアクティブな AWS CloudHSM クラスター。 [AWS CloudHSM クライアント SDK 5 の JCE プロバイダーをインストールする](java-library-install_5.md)
**注記**  
HSM クラスターは1つでも使用できますが、まずクライアントキーの耐久性を無効にする必要があります。詳細については、[クライアントキーの耐久性設定の管理](working-client-sync.md#client-sync-sdk8) そして [クライアント SDK 5 設定ツール](configure-sdk-5.md) を参照してください。

#### 前提条件を満たすには
<a name="jsse-prereqs-how-to"></a>

1. 少なくとも 2 つのハードウェアセキュリティモジュール (HSM) を持つアクティブな AWS CloudHSM クラスター AWS CloudHSM に、 の JCE をインストールして設定します。 HSMs インストールの詳細については、「[クライアント SDK 5 向け JCE](java-library-install_5.md)」を参照してください。

1.  AWS CloudHSM クラスターにアクセスできる EC2 Linux インスタンスで、[Apache Tomcat の指示](https://tomcat.apache.org/download-90.cgi )に従って Tomcat ウェブサーバーをダウンロードしてインストールします。

1. [CloudHSM CLI](cloudhsm_cli.md) を使用して Crypto User (CU) を作成します。HSM ユーザーの管理の詳細については、[CloudHSM CLI を使用した HSM ユーザー管理について](manage-hsm-users-chsm-cli.md) を参照してください。
**ヒント**  
CU のユーザー名とパスワードを書き留めます。後に、ウェブサーバーの HTTPS プライベートキーや証明書を生成またはインポートするときに必要になります。

1. Java キーツールを使用して JCE をセットアップするには、[クライアント SDK 5 を使用して Java Keytool および Jarsigner AWS CloudHSM と統合する](keystore-third-party-tools_5.md) に記載されている手順に従ってください。

以上のステップが完了したら、「[ステップ 2: プライベートキーと SSL/TLS 証明書を生成またはインポートする](#third-offload-linux-jsse-gen)」に進みます。

#### 注意事項
<a name="jsse-prereqs-notes"></a>
+ セキュリティ強化 Linux (SELinux) および Web サーバーを使用するには、クライアント SDK 5 が HSM と通信するために使用するポート 2223 でアウトバウンド TCP 接続を許可する必要があります。
+ クラスターを作成してアクティブ化し、EC2 インスタンスにクラスターへのアクセス権を付与するには、[AWS CloudHSMの使用開始](getting-started.md) の手順を実行します。このセクションでは、1 つの HSM と Amazon EC2 クライアントインスタンスでアクティブなクラスターを作成するためのステップバイステップの手順を提供しています。このクライアントインスタンスをウェブサーバーとして使用することができます。
+ クライアントキーの耐久性を無効化しないようにするには、クラスターに複数の HSM を追加します。詳細については、「[AWS CloudHSM クラスターへの HSM の追加](add-hsm.md)」を参照してください。
+ クライアントインスタンスに接続するには、SSH または PuTTY を使用することができます。詳細については、「Amazon EC2 ドキュメント」の「[SSH を使用した Linux インスタンスへの接続](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html)」または「[PuTTY を使用した Windows から Linux インスタンスへの接続](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html)」を参照してください。

## ステップ 2: プライベートキーと SSL/TLS 証明書を生成またはインポートする
<a name="third-offload-linux-jsse-gen"></a>

HTTPS を有効にするには、Tomcat ウェブサーバーアプリケーションにプライベートキーと、それに対応する SSL/TLS 証明書が必要です。でウェブサーバーの SSL/TLS オフロードを使用するには AWS CloudHSM、プライベートキーを AWS CloudHSM クラスターの HSM に保存する必要があります。

**注記**  
プライベートキーとそれに対応する証明書を持っていない場合、HSM でプライベートキーを生成できます。このプライベートキーを使用して証明書署名リクエスト (CSR) を作成し、それを使用してSSL/TLS証明書を作成します。

HSM のプライベートキーへの参照と関連する証明書を含む local AWS CloudHSM KeyStore ファイルを作成します。ウェブサーバーは、 AWS CloudHSM KeyStore ファイルを使用して、SSL/TLS オフロード中に HSM のプライベートキーを識別します。

**Topics**
+ [プライベートキーの生成](#jsse-ssl-offload-generate-private-key)
+ [自己署名証明書を生成します](#jsse-ssl-offload-generate-certificate)

### プライベートキーの生成
<a name="jsse-ssl-offload-generate-private-key"></a>

このセクションでは、JDK から KeyTool を使用してキーペアを生成する方法について説明します。HSM 内でキーペアを生成したら、それを KeyStore ファイルとしてエクスポートし、それに対応する証明書を生成できます。

ユースケースに応じて、RSA または EC キーペアを生成できます。以下の手順では、RSA キーペアを生成する方法を示します。

**KeyTool の `genkeypair` コマンドを使用して RSA キーペアを生成します**

1. 下の *<VARIABLES>* を特定のデータに置き換えたら、次のコマンドを使用して `jsse_keystore.keystore` という名前のキーストアファイルを生成します。このファイルには HSM 上のプライベートキーへの参照が含まれます。

   ```
   $ keytool -genkeypair -alias <UNIQUE ALIAS FOR KEYS> -keyalg <KEY ALGORITHM> -keysize <KEY SIZE> -sigalg <SIGN ALGORITHM> \
           -keystore <PATH>/<JSSE KEYSTORE NAME>.keystore -storetype CLOUDHSM \
           -dname CERT_DOMAIN_NAME \
           -J-classpath '-J'$JAVA_LIB'/*:/opt/cloudhsm/java/*:./*' \
           -provider "com.amazonaws.cloudhsm.jce.provider.CloudHsmProvider" \
           -providerpath "$CLOUDHSM_JCE_LOCATION" \
           -keypass <KEY PASSWORD> -storepass <KEYSTORE PASSWORD>
   ```
   + ***<PATH>***: キーストアファイルを生成するパス。
   + ***<UNIQUE ALIAS FOR KEYS>***: これは HSM 上でキーを一意に識別するために使用されます。このエイリアスは、キーの LABEL 属性として設定されます。
   + ***<KEY PASSWORD>***: キーへの参照はローカルキーストアファイルに保存され、このパスワードによってローカル参照が保護されます。
   + ***<KEYSTORE PASSWORD>***: これはローカルキーストアファイルのパスワードです。
   + ***<JSSE KEYSTORE NAME>***: キーストアファイルの名前。
   + ***<CERT DOMAIN NAME>***: X.500 識別名。
   + ***<KEY ALGORITHM>***: キーペアを生成するためのキーアルゴリズム (RSA と EC など)。
   + ***<KEY SIZE>***: キーペアを生成するためのキーサイズ (たとえば、2,048、3,072、4,096)。
   + ***<SIGN ALGORITHM>***: キーペアを生成するためのキーサイズ（たとえば、SHA1withRSA、SHA224withRSA、SHA256withRSA、SHA384withRSA、SHA512withRSA）。

1. コマンドが成功したことを確認するには、次のコマンドを入力し、RSA キーペアが正常に生成されたことを確認します。

   ```
   $ ls <PATH>/<JSSE KEYSTORE NAME>.keystore
   ```

### 自己署名証明書を生成します
<a name="jsse-ssl-offload-generate-certificate"></a>

キーストアファイルとともにプライベートキーを生成したら、このファイルを使用して証明書署名リクエスト (CSR) と証明書を生成できます。

本稼働環境では、通常、認証局 (CA) を使用して CSR から証明書を作成します。CA は、テスト環境では必要ありません。CA を使用する場合は、CA に CSR ファイルを送信し、HTTPS 用のウェブサーバーで提供される署名付き SSL/TLS 証明書を使用してください。

CA を使用する代わりに、KeyTool を使用して自己署名証明書を作成できます。自己署名証明書はブラウザによって信頼されないため、本稼働環境では使用しないでください。これらは、テスト環境で使用することができます。

**警告**  
自己署名証明書はテスト環境でのみ使用する必要があります。本稼働環境では、証明機関を使用して証明書を作成するなど、より安全な方法を使用してください。

**Topics**<a name="jsse-ssl-procedure-offload-generate-certificate"></a>

**証明書を生成する**

1. 前のステップで生成したキーストアファイルのコピーを入手します。

1. 次のコマンドを実行して、KeyTool を使用して証明書署名リクエスト (CSR) を作成します。

   ```
   $ keytool -certreq -keyalg RSA -alias unique_alias_for_key -file certreq.csr \
           -keystore <JSSE KEYSTORE NAME>.keystore -storetype CLOUDHSM \
           -J-classpath '-J$JAVA_LIB/*:/opt/cloudhsm/java/*:./*' \
           -keypass <KEY PASSWORD> -storepass <KEYSTORE PASSWORD>
   ```
**注記**  
証明書署名リクエストの出力ファイルは `certreq.csr` です。<a name="jsse-ssl-procedure-offload-sign-certificate"></a>

**証明書に署名する**
+ 下の *<VARIABLES>* を特定のデータに置き換えた後、次のコマンドを実行して、HSM 上のプライベートキーを使用して CSR に署名します。これにより、自己署名証明書が作成されます。

  ```
  $ keytool -gencert -infile certreq.csr -outfile certificate.crt \
      -alias <UNIQUE ALIAS FOR KEYS> -keypass <KEY_PASSWORD> -storepass <KEYSTORE_PASSWORD> -sigalg SIG_ALG \
      -storetype CLOUDHSM -J-classpath '-J$JAVA_LIB/*:/opt/cloudhsm/java/*:./*' \
      -keystore jsse_keystore.keystore
  ```
**注記**  
`certificate.crt` は、エイリアスのプライベートキーを使用する署名付き証明書です。<a name="jsse-ssl-procedure-offload-import-certificate"></a>

**Keystore に証明書をインポートする**
+ 下の *<VARIABLES>* を特定のデータに置き換えた後、次のコマンドを実行して、署名付き証明書を信頼できる証明書としてインポートします。このステップでは、エイリアスで識別されるキーストアエントリに証明書を保存します。

  ```
  $ keytool -import -alias <UNIQUE ALIAS FOR KEYS> -keystore jsse_keystore.keystore \
      -file certificate.crt -storetype CLOUDHSM \
      -v -J-classpath '-J$JAVA_LIB/*:/opt/cloudhsm/java/*:./*' \
      -keypass <KEY PASSWORD> -storepass <KEYSTORE_PASSWORD>
  ```<a name="jsse-ssl-procedure-offload-convert-certificate"></a>

**証明書を PEM に変換する**
+ 次のコマンドを実行して、署名付き証明書ファイル (`.crt`) を PEM に変換します。PEM ファイルは http クライアントからのリクエストの送信に使用されます。

  ```
  $ openssl x509 -inform der -in certificate.crt -out certificate.pem
  ```

これらの手順を完了したら、「[ステップ 3: ウェブサーバーの設定](#third-offload-linux-jsse-config)」に進みます。

## ステップ 3: Tomcat ウェブサーバーを設定する
<a name="third-offload-linux-jsse-config"></a>

前のステップで作成した HTTPS 証明書と PEM ファイルを使用するようにウェブサーバーソフトウェアの設定を更新します。開始する前に、既存の証明書とキーを必ずバックアップしてください。これで、 AWS CloudHSMを使用して、Linux ウェブサーバーソフトウェアに SSL/TLS オフロードを設定できます。詳細については、「[Apache Tomcat 9 設定リファレンス](https://tomcat.apache.org/tomcat-9.0-doc/config/http.html)」を参照してください。<a name="jsse-config-stop-server"></a>

**サーバーを停止します**
+ 下の *<VARIABLES>* を特定のデータに置き換えたら、設定を更新する前に、次のコマンドを実行して Tomcat Server を停止します

  ```
  $ /<TOMCAT DIRECTORY>/bin/shutdown.sh
  ```
  + ***<TOMCAT DIRECTORY>***: Tomcat のインストールディレクトリ。<a name="jsse-config-update-class-path"></a>

**Tomcat クラスパスを更新する**

1. クライアントインスタンスに接続します。

1. Tomcat インストールフォルダを探します。

1. 以下の *<VARIABLES>* を特定のデータに置き換えたら、次のコマンドを使用して、Tomcat/bin/catalina.sh ファイル**classpath**にある Tomcat に Java ライブラリと AWS CloudHSM Java パスを追加します。 Tomcat/bin/catalina

   ```
   $ sed -i 's@CLASSPATH="$CLASSPATH""$CATALINA_HOME"\/bin\/bootstrap.jar@CLASSPATH="$CLASSPATH""$CATALINA_HOME"\/bin\/bootstrap.jar:'"
           <JAVA LIBRARY>"'\/*:\/opt\/cloudhsm\/java\/*:.\/*@' <TOMCAT PATH> /bin/catalina.sh
   ```
   + ***<JAVA LIBRARY>***: Java JRE ライブラリの場所。
   + ***<TOMCAT PATH>***: Tomcat のインストールフォルダー。<a name="jsse-config-add-https"></a>

**HTTPS コネクタをサーバー設定に追加します。**

1. Tomcat のインストールフォルダーに移動します。

1. 下の *<VARIABLES>* を特定のデータに置き換えたら、以下のコマンドを使用して HTTPS コネクタを追加し、前提条件で生成された証明書を使用します。

   ```
   $ sed -i '/<Connector port="8080"/i <Connector port=\"443\" maxThreads=\"200\" scheme=\"https\" secure=\"true\" SSLEnabled=\"true\" keystoreType=\"CLOUDHSM\" keystoreFile=\"
           <CUSTOM DIRECTORY>/<JSSE KEYSTORE NAME>.keystore\" keystorePass=\"<KEYSTORE PASSWORD>\" keyPass=\"<KEY PASSWORD>
           \" keyAlias=\"<UNIQUE ALIAS FOR KEYS>" clientAuth=\"false\" sslProtocol=\"TLS\"/>' <TOMCAT PATH>/conf/server.xml
   ```
   + ***<CUSTOM DIRECTORY>***: キーストアファイルが置かれているディレクトリ。
   + ***<JSSE KEYSTORE NAME>***: キーストアファイルの名前。
   + ***<KEYSTORE PASSWORD>***: これはローカルキーストアファイルのパスワードです。
   + ***<KEY PASSWORD>***: キーへの参照はローカルキーストアファイルに保存され、このパスワードによってローカル参照が保護されます。
   + ***<UNIQUE ALIAS FOR KEYS>***: これは HSM 上でキーを一意に識別するために使用されます。このエイリアスは、キーの LABEL 属性として設定されます。
   + ***<TOMCAT PATH>***: Tomcat フォルダへのパス。<a name="jsse-config-start-server"></a>

**サーバーの起動**
+ 下の *<VARIABLES>* を特定のデータに置き換えたら、以下のコマンドを使用して Tomcat サーバーを起動します。

  ```
  $ /<TOMCAT DIRECTORY>/bin/startup.sh
  ```
**注記**  
***<TOMCAT DIRECTORY>*** は、Tomcat のインストールディレクトリの名前です。

ウェブサーバー設定を更新したら、「[ステップ 4: HTTPS トラフィックを有効にして証明書を検証する](#third-offload-linux-jsse-verify)」に移動します。

## ステップ 4: HTTPS トラフィックを有効にして証明書を検証する
<a name="third-offload-linux-jsse-verify"></a>

で SSL/TLS オフロード用にウェブサーバーを設定したら AWS CloudHSM、インバウンド HTTPS トラフィックを許可するセキュリティグループにウェブサーバーインスタンスを追加します。これにより、ウェブブラウザなどのクライアントがウェブサーバーと HTTPS 接続を確立できるようになります。次に、ウェブサーバーに HTTPS 接続し、SSL/TLS オフロード用に設定した証明書を使用していることを確認します AWS CloudHSM。

**Topics**
+ [インバウンド HTTPS 接続の有効化](#jsse-linux-add-security-group)
+ [設定した証明書が HTTPS で使用されていることを検証する](#jsse-linux-verify-https-connection)

### インバウンド HTTPS 接続の有効化
<a name="jsse-linux-add-security-group"></a>

クライアント (ウェブブラウザなど) からウェブサーバーに接続するには、インバウンド HTTPS 接続を許可するセキュリティグループを作成します。具体的には、ポート 443 でインバウンドの TCP 接続を許可する必要があります。このセキュリティグループをウェブサーバーに割り当てます。

**HTTPS のセキュリティグループを作成してウェブサーバーに割り当てるには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで、[**セキュリティグループ**] を選択します。

1. **[Create Security Group]** を選択します。

1. [**Create Security Group**] で、以下の操作を行います。

   1. [**Security group name**] に、作成するセキュリティグループの名前を入力します 

   1. (オプション) 作成するセキュリティグループの説明を入力します。

   1. [**VPC**] で、ウェブサーバーのAmazon EC2インスタンスが含まれている VPC を選択します。

   1. [**Add rule (ルールの追加)**] を選択します。

   1. [**タイプ**] で、ドロップダウンウィンドウから [**HTTPS**] を選択します。

   1. [**ソース**] には、ソースの場所を入力します。

   1. **[セキュリティグループの作成]** を選択してください。

1. ナビゲーションペインで、[**インスタンス**] を選択してください。

1. ウェブサーバーインスタンスの横にあるチェックボックスを選択します。

1. ページの上部で [**アクション**] ドロップダウンメニューを選択します。[**セキュリティ**] を選択し、[**セキュリティグループの変更**] を選択します。

1. [**関連付けられたセキュリティグループ**] で、検索ボックスを選択して HTTPS 用に作成したセキュリティグループを選択します。次に、[**セキュリティグループの追加**] を選択します。

1. **[保存]** を選択します。

### 設定した証明書が HTTPS で使用されていることを検証する
<a name="jsse-linux-verify-https-connection"></a>

ウェブサーバーをセキュリティグループに追加した後、SSL/TLS オフロードが自己署名証明書を使用していることを確認できます。この検証には、ウェブブラウザ、または [OpenSSL s\$1client](https://www.openssl.org/docs/manmaster/man1/s_client.html) などのツールを使用できます。

**ウェブブラウザで SSL/TLS オフロードを確認するには**

1. ウェブブラウザを使用し、サーバーの公開 DNS 名または IP アドレスを使用してウェブサーバーに接続します。アドレスバーの URL が https:// で始まっていることを確認します。例えば、**https://ec2-52-14-212-67.us-east-2.compute.amazonaws.com/**。
**ヒント**  
Amazon Route 53 などの DNS サービスを使用して、ウェブサイトのドメイン名 (https://www.example.com/ など) をウェブサーバーにルーティングできます。詳細については、*Amazon Route 53 開発者ガイド* の [Amazon EC2 インスタンスへのトラフィックのルーティング](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-ec2-instance.html) または DNS サービスのドキュメントを参照してください。

1. ウェブブラウザを使用して、ウェブサーバー証明書を表示します。詳細については次を参照してください:
   + Mozilla Firefox の場合は、Mozilla サポートウェブサイトの「[証明書を見る](https://support.mozilla.org/en-US/kb/secure-website-certificate#w_view-a-certificate)」を参照してください。
   + Google Chrome の場合は、ウェブ開発者向け Google ツールのウェブサイトで「[セキュリティの問題を理解する](https://developers.google.com/web/tools/chrome-devtools/security)」を参照してください。

   他のウェブブラウザでも、同様の機能を使用してウェブサーバー証明書を表示できる場合があります。

1. SSL/TLS 証明書が、ウェブサーバーに設定したものであることを確認してください。

**OpenSSL s\$1client で SSL/TLS オフロードを確認するには**

1. HTTPS を使用してウェブサーバーに接続するには、次の OpenSSL コマンドを実行します。*<サーバー名>* は、ウェブサーバーの公開 DNS 名または IP アドレスに置き換えます。

   ```
   openssl s_client -connect <server name>:443
   ```
**ヒント**  
Amazon Route 53 などの DNS サービスを使用して、ウェブサイトのドメイン名 (https://www.example.com/ など) をウェブサーバーにルーティングできます。詳細については、*Amazon Route 53 開発者ガイド* の [Amazon EC2 インスタンスへのトラフィックのルーティング](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-ec2-instance.html) または DNS サービスのドキュメントを参照してください。

1. SSL/TLS 証明書が、ウェブサーバーに設定したものであることを確認してください。

これで、ウェブサイトが HTTPS で保護されるようになりました。ウェブサーバーのプライベートキーは、 AWS CloudHSM クラスターの HSM に保存されます。

ロードバランサーを追加するには、「[Elastic Load Balancing for でロードバランサーを追加する AWS CloudHSM(オプション)](third-offload-add-lb.md)」を参照してください。