AWS CloudHSM SSLで Tomcat を使用して Linux で /TLS オフロードする JSSE - AWS CloudHSM

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

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 設定ツール」を参照してください。

前提条件を満たすには
  1. 少なくとも 2 つのハードウェアセキュリティモジュール () を持つアクティブな AWS CloudHSM クラスター AWS CloudHSM に JCEの をインストールして設定しますHSMs。インストールの詳細については、JCE「 for Client SDK 5」を参照してください。

  2. AWS CloudHSM クラスターにアクセスできる EC2 Linux インスタンスで、Apache Tomcat の指示に従って Tomcat ウェブサーバーをダウンロードしてインストールします。

  3. クラウドHSMCLIを使用して、Crypto User (CU) を作成します。HSM ユーザーの管理の詳細については、「 クラウドHSMによるHSMユーザーの管理CLI」を参照してください。

    ヒント

    CU のユーザー名とパスワードを書き留めます。後でウェブサーバーのHTTPSプライベートキーと証明書を生成またはインポートするときに必要になります。

  4. 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キーペアを生成する
  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>: Keystore ファイルの名前。

    • <CERT DOMAIN NAME>: X.500 識別名。

    • <KEY ALGORITHM>: キーペアを生成するキーアルゴリズム ( RSAや EC など)。

    • <KEY SIZE>: キーペアを生成するキーサイズ (2048、3072、4096 など)。

    • <SIGN ALGORITHM>: キーペアを生成するキーサイズ (、、SHA1withRSASHA224withRSA、SHA256withRSASHA384withRSA、 などSHA512withRSA)。

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

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

自己署名証明書を生成します

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

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

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

警告

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

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

    2. 次のコマンドを実行して、 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 のクラスパスを更新してください
    1. クライアントインスタンスに接続します。

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

    3. <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 コネクタを追加します。
    1. Tomcat のインストールフォルダーに移動します。

    2. <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に割り当てるには
    1. で Amazon EC2コンソールを開きますhttps://console.aws.amazon.com/ec2/

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

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

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

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

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

      3. VPC、ウェブサーバーの Amazon EC2インスタンスVPCを含む を選択します。

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

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

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

      7. [セキュリティグループの作成] を選択します。

    5. ナビゲーションペインで、[インスタンス] を選択します。

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

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

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

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

    が設定した証明書HTTPSを使用していることを確認する

    ウェブサーバーをセキュリティグループに追加すると、 SSL/TLS オフロードが自己署名証明書を使用していることを確認できます。これは、ウェブブラウザまたは OpenSSL s_client などのツールで実行できます。

    ウェブブラウザで検証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 インスタンスへのトラフィックのルーティング」またはDNSサービスのドキュメントの「」を参照してください。

    2. ウェブブラウザを使用して、ウェブサーバー証明書を表示します。詳細については、次を参照してください。

      • Mozilla Firefox の場合は、Mozilla サポートウェブサイトの「証明書を見る」を参照してください。

      • Google Chrome の場合は、ウェブ開発者向け Google ツールのウェブサイトで「セキュリティの問題を理解する」を参照してください。

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

    3. SSL/TLS 証明書が、ウェブサーバーで使用するように設定した証明書であることを確認します。

    OpenSSL s_client で検証SSL/TLSオフロードするには
    1. 次の 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サービスのドキュメントの「」を参照してください。

    2. SSL/TLS 証明書が、ウェブサーバーで使用するように設定した証明書であることを確認します。

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

    ロードバランサーを追加するには、「AWS CloudHSM に対して、Elastic Load Balancing を使用してロードバランサーを追加する (オプション)」を参照してください。