翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS CloudHSM SSLで Tomcat を使用して Linux で /TLS オフロードする JSSE
このトピックでは step-by-step、 で Java Secure Socket Extension (JSSE) を使用して をセットアップSSL/TLSオフロードする AWS CloudHSM JCE手順について説明しますSDK。
トピック
概要
では AWS CloudHSM、Tomcat ウェブサーバーは Linux で をサポートしていますHTTPS。 AWS CloudHSM JCE SDK は、 JSSE (Java Secure Socket Extension) で使用できるインターフェイスを提供しますHSMs。 AWS CloudHSM JCEはAWS、 クラウドHSMクラスターJSSEに接続するブリッジです。 JSSEは、Secure Sockets Layer (SSL) および Transport Layer Security (TLS) プロトコルAPI用の Java です。
ステップ 1: 前提条件の設定
クライアント SDK5 と Tomcat ウェブサーバーでSSL/TLS offload on Linux. These prerequisites must be met to set up web server SSL/TLSオフロード AWS CloudHSM に で Tomcat ウェブサーバーを使用するには、次の前提条件に従います。
注記
プラットフォームごとに、異なる前提条件が必要です。使用しているプラットフォームに適したインストール手順を必ず実行してください。
前提条件
-
Tomcat ウェブサーバーがインストールされた Linux オペレーティングシステムを実行している Amazon EC2インスタンス。
-
でウェブサーバーのプライベートキーを所有および管理するための Crypto User (CU)HSM。
-
クライアント 5 用の がインストールおよび設定された 2 つ以上のハードウェアセキュリティモジュール (HSMs) を持つアクティブな AWS CloudHSM クラスター。 JCE SDK
注記
1 つのHSMクラスターを使用できますが、まずクライアントキーの耐久性を無効にする必要があります。詳細については、「クライアントキーの耐久性設定の管理」および「クライアント SDK 5 設定ツール」を参照してください。
前提条件を満たすには
-
少なくとも 2 つのハードウェアセキュリティモジュール () を持つアクティブな AWS CloudHSM クラスター AWS CloudHSM に JCEの をインストールして設定しますHSMs。インストールの詳細については、JCE「 for Client SDK 5」を参照してください。
-
AWS CloudHSM クラスターにアクセスできる EC2 Linux インスタンスで、Apache Tomcat の指示
に従って Tomcat ウェブサーバーをダウンロードしてインストールします。 -
クラウドHSMCLIを使用して、Crypto User (CU) を作成します。HSM ユーザーの管理の詳細については、「 クラウドHSMによるHSMユーザーの管理CLI」を参照してください。
ヒント
CU のユーザー名とパスワードを書き留めます。後でウェブサーバーのHTTPSプライベートキーと証明書を生成またはインポートするときに必要になります。
Java Keytool JCEで を設定するには、「」の手順に従いますクライアント SDK 5 を使用して AWS CloudHSM を Java Keytool および Jarsigner と統合する。
以上のステップが完了したら、「ステップ 2: プライベートキーとSSL証明書TLSを生成またはインポートする」に進みます。
メモ
-
Security-Enhanced Linux (SELinux) およびウェブサーバーを使用するには、クライアント 5 が との通信に使用するポートであるポート 2223 SDK でアウトバウンドTCP接続を許可する必要がありますHSM。
-
クラスターを作成してアクティブ化し、EC2インスタンスにクラスターへのアクセスを許可するには、「 の開始方法 AWS CloudHSM」の手順を実行します。このセクションでは、 step-by-step1 つの HSMと Amazon EC2クライアントインスタンスを使用してアクティブなクラスターを作成する手順について説明します。このクライアントインスタンスをウェブサーバーとして使用することができます。
-
クライアントキーの耐久性を無効にしないようにするには、クラスターHSMに複数の を追加します。詳細については、「AWS CloudHSM クラスターHSMへの の追加」を参照してください。
-
クライアントインスタンスに接続するには、 SSHまたは Pu を使用できますTTY。詳細については、Amazon EC2ドキュメントの「 を使用して Linux インスタンスSSHに接続する」または「Pu を使用して Windows から Linux インスタンスに接続するTTY」を参照してください。
ステップ 2: プライベートキーとSSL証明書TLSを生成またはインポートする
を有効にするにはHTTPS、Tomcat ウェブサーバーアプリケーションにプライベートキーとそれに対応するSSL/TLS certificate. To use web server SSL/TLSオフロードが必要です。プライベートキーを AWS CloudHSM クラスターHSMの に保存 AWS CloudHSMする必要があります。
注記
プライベートキーと対応する証明書がまだない場合は、 でプライベートキーを生成しますHSM。プライベートキーを使用して証明書署名リクエスト (CSR) を作成します。このリクエストは、SSL/TLS 証明書の作成に使用します。
HSM および関連する証明書のプライベートキーへの参照を含むローカル AWS CloudHSM KeyStore ファイルを作成します。ウェブサーバーは、 AWS CloudHSM KeyStore ファイルを使用して、SSL/TLS オフロードHSM中に のプライベートキーを識別します。
プライベートキーの生成
このセクションでは、 KeyTool から を使用してキーペアを生成する方法を示しますJDK。内でキーペアを生成したらHSM、 KeyStore ファイルとしてエクスポートし、対応する証明書を生成できます。
ユースケースに応じて、 RSAまたは EC キーペアを生成できます。次の手順は、 RSAキーペアを生成する方法を示しています。
で genkeypair
コマンド KeyTool を使用して RSAキーペアを生成する
<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>
: Keystore ファイルの名前。<CERT DOMAIN NAME>
: X.500 識別名。<KEY ALGORITHM>
: キーペアを生成するキーアルゴリズム ( RSAや EC など)。<KEY SIZE>
: キーペアを生成するキーサイズ (2048、3072、4096 など)。<SIGN ALGORITHM>
: キーペアを生成するキーサイズ (、、SHA1withRSASHA224withRSA、SHA256withRSASHA384withRSA、 などSHA512withRSA)。
-
コマンドが成功したことを確認するには、次のコマンドを入力し、 RSAキーペアが正常に生成されたことを確認します。
$
ls
<PATH>
/<JSSE KEYSTORE NAME>
.keystore
自己署名証明書を生成します
キーストアファイルとともにプライベートキーを生成したら、このファイルを使用して証明書署名リクエスト (CSR) と証明書を生成できます。
本番環境では、通常、認証局 (CA) を使用して から証明書を作成しますCSR。CA は、テスト環境では必要ありません。CA を使用する場合は、その CA にCSRファイルを送信し、 のウェブサーバーで提供される署名付き SSL/TLS 証明書を使用しますHTTPS。
CA を使用する代わりに、 KeyTool を使用して自己署名証明書を作成できます。自己署名証明書はブラウザによって信頼されないため、本稼働環境では使用しないでください。これらは、テスト環境で使用することができます。
警告
自己署名証明書はテスト環境でのみ使用する必要があります。本稼働環境では、証明機関を使用して証明書を作成するなど、より安全な方法を使用してください。
トピック
証明書を生成する
-
前のステップで生成したキーストアファイルのコピーを入手します。
-
次のコマンドを実行して、 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
です。
証明書に署名する
-
<VARIABLES>
以下の を特定のデータに置き換えたら、次のコマンドを実行して、 のプライベートキーCSRで に署名しますHSM。これにより、自己署名証明書が作成されます。$
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
は、エイリアスのプライベートキーを使用する署名付き証明書です。
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>
証明書を に変換する PEM
次のコマンドを実行して、署名付き証明書ファイル (.crt) を に変換しますPEM。PEM ファイルは、http クライアントからリクエストを送信するために使用されます。
$
openssl x509 -inform der -in certificate.crt -out certificate.pem
これらの手順を完了したら、「ステップ 3: ウェブサーバーの設定」に進みます。
ステップ 3: Tomcat ウェブサーバーを設定する
ウェブサーバーソフトウェアの設定を更新して、前のステップで作成したHTTPS証明書と対応するPEMファイルを使用します。開始する前に、既存の証明書とキーを必ずバックアップしてください。これで、 SSL/TLS オフロード用の Linux ウェブサーバーソフトウェアの設定は完了です AWS CloudHSM。詳細については、「Apache Tomcat 9 設定リファレンス
サーバーを停止します
<VARIABLES>
以下の を特定のデータに置き換えたら、次のコマンドを実行して Tomcat Server を停止してから設定を更新します。$
/
<TOMCAT DIRECTORY>
/bin/shutdown.sh<TOMCAT DIRECTORY>
: Tomcat インストールディレクトリ。
Tomcat のクラスパスを更新してください
-
クライアントインスタンスに接続します。
-
Tomcat インストールフォルダを探します。
-
<VARIABLES>
以下を特定のデータに置き換えたら、次のコマンドを使用して、.Tomcat/bin/catalinash ファイルにある Tomcat クラスパスに Java ライブラリと Cloudhsm Java パスを追加します。$
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 インストールフォルダ。
サーバー設定に HTTPS コネクタを追加します。
Tomcat のインストールフォルダーに移動します。
<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 ファイルの名前。<KEYSTORE PASSWORD>
: これはローカルキーストアファイルのパスワードです。<KEY PASSWORD>
: キーへの参照はローカルキーストアファイルに保存されます。このパスワードは、そのローカル参照を保護します。<UNIQUE ALIAS FOR KEYS>
: これは、 でキーを一意に識別するために使用されますHSM。このエイリアスはキーのLABEL属性として設定されます。<TOMCAT PATH>
: Tomcat フォルダへのパス。
サーバーの起動
<VARIABLES>
以下を特定のデータに置き換えたら、次のコマンドを使用して Tomcat Server を起動します。$
/
<TOMCAT DIRECTORY>
/bin/startup.sh注記
<TOMCAT DIRECTORY>
は Tomcat インストールディレクトリの名前です。
ウェブサーバー設定を更新したら、「ステップ 4: HTTPSトラフィックを有効にして証明書を検証する」に移動します。
ステップ 4: HTTPSトラフィックを有効にして証明書を検証する
でウェブサーバーを SSL/TLS オフロード用に設定したら AWS CloudHSM、インバウンドHTTPSトラフィックを許可するセキュリティグループにウェブサーバーインスタンスを追加します。これにより、ウェブブラウザなどのクライアントがウェブサーバーとHTTPSの接続を確立できます。次に、ウェブサーバーHTTPSに接続し、 SSL/TLS オフロード用に設定した証明書を使用していることを確認します AWS CloudHSM。
インバウンドHTTPS接続を有効にする
クライアント (ウェブブラウザなど) からウェブサーバーに接続するには、インバウンドHTTPS接続を許可するセキュリティグループを作成します。具体的には、ポート 443 でインバウンドTCP接続を許可する必要があります。このセキュリティグループをウェブサーバーに割り当てます。
のセキュリティグループを作成してウェブサーバーHTTPSに割り当てるには
-
で Amazon EC2コンソールを開きますhttps://console.aws.amazon.com/ec2/
。 -
ナビゲーションペインで、[セキュリティグループ] を選択します。
-
[Create Security Group] を選択します。
-
[Create Security Group] で、以下の操作を行います。
-
[Security group name] に、作成するセキュリティグループの名前を入力します
-
(オプション) 作成するセキュリティグループの説明を入力します。
-
でVPC、ウェブサーバーの Amazon EC2インスタンスVPCを含む を選択します。
-
[Add rule (ルールの追加)] を選択します。
-
タイプ で、ドロップダウンウィンドウHTTPSから を選択します。
-
[ソース] には、ソースの場所を入力します。
-
[セキュリティグループの作成] を選択します。
-
-
ナビゲーションペインで、[インスタンス] を選択します。
-
ウェブサーバーインスタンスの横にあるチェックボックスを選択します。
-
ページの上部で [アクション] ドロップダウンメニューを選択します。[セキュリティ] を選択し、[セキュリティグループの変更] を選択します。
-
関連付けられたセキュリティグループで、検索ボックスを選択し、 用に作成したセキュリティグループを選択しますHTTPS。次に、[セキュリティグループの追加] を選択します。
-
[保存] を選択します。
が設定した証明書HTTPSを使用していることを確認する
ウェブサーバーをセキュリティグループに追加すると、 SSL/TLS オフロードが自己署名証明書を使用していることを確認できます。これは、ウェブブラウザまたは OpenSSL s_client
ウェブブラウザで検証SSL/TLSオフロードするには
-
ウェブブラウザを使用して、サーバーのパブリック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 インスタンスへのトラフィックのルーティング」またはDNSサービスのドキュメントの「」を参照してください。
-
ウェブブラウザを使用して、ウェブサーバー証明書を表示します。詳細については、次を参照してください。
-
Mozilla Firefox の場合は、Mozilla サポートウェブサイトの「証明書を見る
」を参照してください。 -
Google Chrome の場合は、ウェブ開発者向け Google ツールのウェブサイトで「セキュリティの問題を理解する
」を参照してください。
他のウェブブラウザでも、同様の機能を使用してウェブサーバー証明書を表示できる場合があります。
-
-
SSL/TLS 証明書が、ウェブサーバーで使用するように設定した証明書であることを確認します。
OpenSSL s_client で検証SSL/TLSオフロードするには
-
次の OpenSSL コマンドを実行して、 を使用してウェブサーバーに接続しますHTTPS。をウェブサーバーのパブリックDNS名または IP アドレス
<server name>
に置き換えます。openssl s_client -connect
<server name>
:443ヒント
Amazon Route 53 などのDNSサービスを使用して、ウェブサイトのドメイン名 ( https://www.example.com/ など) をウェブサーバーにルーティングできます。詳細については、「Amazon Route 53 デベロッパーガイド」の「Amazon EC2 インスタンスへのトラフィックのルーティング」またはDNSサービスのドキュメントの「」を参照してください。
-
SSL/TLS 証明書が、ウェブサーバーで使用するように設定した証明書であることを確認します。
これで、 で保護されたウェブサイトが作成されましたHTTPS。ウェブサーバーのプライベートキーは、 AWS CloudHSM クラスターの HSM に保存されます。
ロードバランサーを追加するには、「AWS CloudHSM に対して、Elastic Load Balancing を使用してロードバランサーを追加する (オプション)」を参照してください。