AWS CloudHSM OpenSSL プロバイダーで NGINX または HAProxy を使用した Linux での OpenSSL/TLS オフロード - AWS CloudHSM

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

AWS CloudHSM OpenSSL プロバイダーで NGINX または HAProxy を使用した Linux での OpenSSL/TLS オフロード

このトピックでは、OpenSSL プロバイダーで NGINX または HAProxy を使用して Linux ウェブサーバー AWS CloudHSM 上の で SSL/TLS サーバー ID OpenSSL オフロードを設定するstep-by-stepについて説明します。

概要:

Linux では、NGINX および HAProxy ウェブサーバーソフトウェアは OpenSSL と統合して HTTPS をサポートします。AWS CloudHSM OpenSSL プロバイダーは、ウェブサーバーソフトウェアがクラスター内の HSMs を暗号化オフロードとキーストレージに使用できるようにするインターフェイスを提供します。OpenSSL プロバイダーは、ウェブサーバーを AWS CloudHSM クラスターに接続するブリッジです。

このチュートリアルを完了するには、 AWS CloudHSM OpenSSL プロバイダーを使用するように NGINX または HAProxy を設定します。このチュートリアルでは、以下の方法を示します。

  • Amazon EC2 インスタンスに、ウェブサーバーソフトウェアをインストールします。

  • AWS CloudHSM クラスターに保存されている秘密キーで、HTTPS をサポートするようにウェブサーバソフトウェアを設定します。

  • (オプション)Amazon EC2 を使用して 2 台目のウェブサーバーインスタンスを作成し、Elastic Load Balancing を使用してロードバランサーを作成します。ロードバランサーを使用すると、複数のサーバーに負荷を分散することでパフォーマンスを向上させることができます。また、1 つ以上のサーバーに障害が発生した場合、冗長性と高可用性を提供します。

始める準備ができたら、「ステップ 1: 前提条件の設定」を参照してください。

ステップ 1: 前提条件の設定

プラットフォームごとに、異なる前提条件が必要です。以下の前提条件セクションのうち、お使いのプラットフォームに合ったものをご利用ください。

AWS CloudHSM OpenSSL プロバイダーの前提条件

クライアント SDK 5 の AWS CloudHSM OpenSSL プロバイダーを使用してウェブサーバー SSL/TLS サーバー ID オフロードを設定するには、以下が必要です。

  • 少なくとも 2 つのハードウェアセキュリティモジュール (HSM) を持つアクティブな AWS CloudHSM クラスター

    注記

    HSM クラスターは1つでも使用できますが、まずクライアントキーの耐久性を無効にする必要があります。詳細については、クライアントキーの耐久性設定の管理 そして クライアント SDK 5 設定ツール を参照してください。

  • Amazon EC2 インスタンスが Linux オペレーティングシステムを実行します。インスタンスに次のソフトウェアがインストールされていることを確認します。

    • ウェブサーバー (NGINX または HAProxy)

    • クライアント SDK 5 の AWS CloudHSM OpenSSL プロバイダー

  • HSM でこのウェブサーバーのプライベートキーを所有および管理する Crypto User (CU)。

Linux ウェブサーバーインスタンスをセットアップし、HSM で CU を作成するには
注記

この手順のコマンドの多くは、昇格された権限を必要とします。システム設定によっては、ルートユーザーとして sudoまたは を使用してコマンドを実行する必要がある場合があります。

  1. クライアント SDK 5 の AWS CloudHSM OpenSSL プロバイダーをインストールして設定します。OpenSSL プロバイダーのインストールの詳細については、「AWS CloudHSM OpenSSL Provider for Client SDK 5」を参照してください。

  2. クラスターにアクセスできる EC2 Linux インスタンスで、NGINX または HAProxy ウェブサーバーをインストールします。

    Amazon Linux 2023
    • NGINX

      $ yum install nginx
    • HAProxy

      $ yum install haproxy
    RHEL 9 (9.2+)
    • NGINX

      $ yum install nginx
    • HAProxy

      $ yum install haproxy
    RHEL 10 (10.0+)
    • NGINX

      $ yum install nginx
    • HAProxy

      $ yum install haproxy
    Ubuntu 24.04
    • NGINX

      $ apt install nginx
    • HAProxy

      $ apt install haproxy
  3. CloudHSM CLI を使用して Crypto User を作成します。HSM ユーザーの管理の詳細については、CloudHSM CLI を使用した HSM ユーザー管理について を参照してください。

    ヒント

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

以上のステップが完了したら、「ステップ 2: プライベートキーを生成またはインポートし、証明書を取得する」に進みます。

注意事項

  • セキュリティ強化 Linux (SELinux) および Web サーバーを使用するには、クライアント SDK 5 が HSM と通信するために使用するポート 2223 でアウトバウンド TCP 接続を許可する必要があります。

  • クラスターを作成してアクティブ化し、EC2 インスタンスにクラスターへのアクセス権を付与するには、AWS CloudHSMの使用開始 の手順を実行します。「はじめに」では、1 つの HSM と Amazon EC2 クライアント インスタンスを含むアクティブなクラスターを作成するための段階的な手順が説明されています。このクライアントインスタンスをウェブサーバーとして使用することができます。

  • クライアントキーの耐久性を無効化しないようにするには、クラスターに複数の HSM を追加します。詳細については、「AWS CloudHSM クラスターへの HSM の追加」を参照してください。

  • クライアントインスタンスに接続するには、SSH または PuTTY を使用することができます。詳細については、「Amazon EC2 ドキュメント」の「SSH を使用した Linux インスタンスへの接続」または「PuTTY を使用した Windows から Linux インスタンスへの接続」を参照してください。

ステップ 2: プライベートキーを生成またはインポートし、証明書を取得する

HTTPS を有効にするには、ウェブサーバーアプリケーション (NGINX または HAProxy) にプライベートキーと対応する SSL/TLS 証明書が必要です。でウェブサーバーの SSL/TLS サーバー ID オフロードを使用するには AWS CloudHSM、プライベートキーを AWS CloudHSM クラスターの HSM に保存する必要があります。最初にプライベートキーを使用し、そのキーを使って証明書署名リクエスト (CSR) を作成します。次に HSM からフェイク PEM プライベートキーをエクスポートします。これは、HSM に保存されているプライベートキーへの参照を含む PEM 形式のプライベートキーファイルで、実際のプライベートキーではありません。ウェブサーバーは、フェイク PEM プライベートキーファイルを使用して、SSL/TLS サーバー ID オフロード中に HSM のプライベートキーを識別します。

プライベートキーの生成

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

CloudHSM CLI をインストールして設定する
  1. CloudHSM CLI をインストールして設定します。

  2. CloudHSM CLI を起動するには、次のコマンドを使用します。

    $ /opt/cloudhsm/bin/cloudhsm-cli interactive
  3. 次のコマンドを実行して HSM にログインします。<user name> を Crypto User のユーザー名に置き換えます。

    aws-cloudhsm>login --username <user name> --role crypto-user

プライベートキーの生成

ユースケースに応じて、RSA または EC キーペアを生成できます。次のいずれかを行います。

  • HSM で RSA プライベートキーを生成するには

    key generate-asymmetric-pair rsa コマンドを使用して RSA キーペアを生成します。この例では、modulus が 2,048、公開指数が 65,537、パブリックキーラベルが tls_rsa_pub、プライベートキーラベルが tls_rsa_private の RSA キーペアを生成します。

    aws-cloudhsm > key generate-asymmetric-pair rsa \ --public-exponent 65537 \ --modulus-size-bits 2048 \ --public-label tls_rsa_pub \ --private-label tls_rsa_private \ --private-attributes sign=true { "error_code": 0, "data": { "public_key": { "key-reference": "0x0000000000280cc8", "key-info": { "key-owners": [ { "username": "cu1", "key-coverage": "full" } ], "shared-users": [], "cluster-coverage": "full" }, "attributes": { "key-type": "rsa", "label": "tls_rsa_pub", "id": "", "check-value": "0x01fe6e", "class": "public-key", "encrypt": true, "decrypt": false, "token": true, "always-sensitive": false, "derive": false, "destroyable": true, "extractable": true, "local": true, "modifiable": true, "never-extractable": false, "private": true, "sensitive": false, "sign": false, "trusted": false, "unwrap": false, "verify": false, "wrap": false, "wrap-with-trusted": false, "key-length-bytes": 512, "public-exponent": "0x010001", "modulus": "0xb1d27e857a876f4e9fd5de748a763c539b359f937eb4b4260e30d1435485a732c878cdad9c72538e2215351b1d41358c9bf80b599c73a80fdb457aa7b20cd61e486c326e2cfd5e124a7f6a996437437812b542e3caf85928aa866f0298580f7967ee6aa01440297d7308fdd9b76b70d1b67f12634df6e6296d6c116d5744c6d60d14d3bf3cb978fe6b75ac67b7089bafd50d8687213b31abc7dc1bad422780d29c851d5102b56f932551eaf52a9591fd8c43d81ecc133022653225bd129f8491101725e9ea33e1ded83fb57af35f847e532eb30cd7e726f23910d2671c6364092e834697ec3cef72cc23615a1ba7c5e100156ae0acac3160f0ca9725d38318b7", "modulus-size-bits": 2048 } }, "private_key": { "key-reference": "0x0000000000280cc7", "key-info": { "key-owners": [ { "username": "cu1", "key-coverage": "full" } ], "shared-users": [], "cluster-coverage": "full" }, "attributes": { "key-type": "rsa", "label": "tls_rsa_private", "id": "", "check-value": "0x01fe6e", "class": "private-key", "encrypt": false, "decrypt": true, "token": true, "always-sensitive": true, "derive": false, "destroyable": true, "extractable": true, "local": true, "modifiable": true, "never-extractable": false, "private": true, "sensitive": true, "sign": true, "trusted": false, "unwrap": false, "verify": false, "wrap": false, "wrap-with-trusted": false, "key-length-bytes": 1217, "public-exponent": "0x010001", "modulus": "0xb1d27e857a876f4e9fd5de748a763c539b359f937eb4b4260e30d1435485a732c878cdad9c72538e2215351b1d41358c9bf80b599c73a80fdb457aa7b20cd61e486c326e2cfd5e124a7f6a996437437812b542e3caf85928aa866f0298580f7967ee6aa01440297d7308fdd9b76b70d1b67f12634df6e6296d6c116d5744c6d60d14d3bf3cb978fe6b75ac67b7089bafd50d8687213b31abc7dc1bad422780d29c851d5102b56f932551eaf52a9591fd8c43d81ecc133022653225bd129f8491101725e9ea33e1ded83fb57af35f847e532eb30cd7e726f23910d2671c6364092e834697ec3cef72cc23615a1ba7c5e100156ae0acac3160f0ca9725d38318b7", "modulus-size-bits": 2048 } } } }
  • HSM で EC プライベートキーを生成するには

    key generate-asymmetric-pair ec コマンドを使用して EC キーペアを生成します。この例では、prime256v1 曲線 (NID_X9_62_prime256v1 曲線に対応) を使用して EC キーペアを生成します。パブリックキーラベルは tls_ec_pub、プライベートキーラベルは tls_ec_private です。

    aws-cloudhsm > key generate-asymmetric-pair ec \ --curve prime256v1 \ --public-label tls_ec_pub \ --private-label tls_ec_private \ --private-attributes sign=true { "error_code": 0, "data": { "public_key": { "key-reference": "0x000000000012000b", "key-info": { "key-owners": [ { "username": "cu1", "key-coverage": "full" } ], "shared-users": [], "cluster-coverage": "session" }, "attributes": { "key-type": "ec", "label": "tls_ec_pub", "id": "", "check-value": "0xd7c1a7", "class": "public-key", "encrypt": false, "decrypt": false, "token": false, "always-sensitive": false, "derive": false, "destroyable": true, "extractable": true, "local": true, "modifiable": true, "never-extractable": false, "private": true, "sensitive": false, "sign": false, "trusted": false, "unwrap": false, "verify": false, "wrap": false, "wrap-with-trusted": false, "key-length-bytes": 57, "ec-point": "0x047096513df542250a6b228fd9cb67fd0c903abc93488467681974d6f371083fce1d79da8ad1e9ede745fb9f38ac8622a1b3ebe9270556000c", "curve": "secp224r1" } }, "private_key": { "key-reference": "0x000000000012000c", "key-info": { "key-owners": [ { "username": "cu1", "key-coverage": "full" } ], "shared-users": [], "cluster-coverage": "session" }, "attributes": { "key-type": "ec", "label": "tls_ec_private", "id": "", "check-value": "0xd7c1a7", "class": "private-key", "encrypt": false, "decrypt": false, "token": false, "always-sensitive": true, "derive": false, "destroyable": true, "extractable": true, "local": true, "modifiable": true, "never-extractable": false, "private": true, "sensitive": true, "sign": true, "trusted": false, "unwrap": false, "verify": false, "wrap": false, "wrap-with-trusted": false, "key-length-bytes": 122, "ec-point": "0x047096513df542250a6b228fd9cb67fd0c903abc93488467681974d6f371083fce1d79da8ad1e9ede745fb9f38ac8622a1b3ebe9270556000c", "curve": "secp224r1" } } } }

フェイク PEM プライベートキーファイルをエクスポート

HSM にプライベートキーを作成したら、フェイク PEM プライベートキーファイルをエクスポートする必要があります。このファイルには実際のキーデータは含まれていませんが、OpenSSL Dynamic Engine が HSM 上のプライベートキーを識別できるようにします。その後、プライベートキーを使用して証明書署名リクエスト (CSR) を作成し、CSR に署名して証明書を作成できます。

key generate-file コマンドを使用して、プライベートキーをフェイク PEM 形式でエクスポートしてファイルに保存します。以下の値は独自の値に置き換えてください。

  • <private_key_label> – 前のステップで生成したプライベートキーのラベル。

  • <web_server_fake_pem.key> – フェイク PEM キーが書き込まれるファイルの名前。

aws-cloudhsm > key generate-file --encoding reference-pem --path <web_server_fake_pem.key> --filter attr.label=<private_key_label> { "error_code": 0, "data": { "message": "Successfully generated key file" } }

CloudHSM CLI を終了する

CloudHSM CLI を停止するには、次のコマンドを実行します。

aws-cloudhsm > quit

これで、前のコマンドで <web_server_fake_pem.key> が指定したパスに新しいファイルがシステム上に作成されることになります。このファイルはフェイク PEM プライベートキーファイルです。

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

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

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

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

警告

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

OpenSSL Dynamic Engine をインストールして設定する
  1. クライアントインスタンスに接続します。

  2. AWS CloudHSM クライアント SDK 5 用の OpenSSL Dynamic Engine をインストールする

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

  2. CSR を作成する

    次のコマンドを実行して、 AWS CloudHSM OpenSSL Dynamic Engine を使用して証明書署名リクエスト (CSR) を作成します。<web_server_fake_pem.key> をフェイク PEM プライベートキーが含まれるファイルの名前に置き換えます。<web_server.csr> を CSR が含まれるファイルの名前に置き換えます。

    req コマンドは対話的です。各フィールドに対応します。このフィールド情報は、SSL/TLS 証明書にコピーされます。

    注記

    CSR の作成は現在、OpenSSL プロバイダーではサポートされていません。このステップでは OpenSSL エンジンを使用する必要がありますが、TLS 暗号オペレーションはプロバイダーと連携します。

    $ openssl req -engine cloudhsm -new -key <web_server_fake_pem.key> -out <web_server.csr>
  3. 自己署名証明書を作成する

    次のコマンドを実行して、 AWS CloudHSM OpenSSL Dynamic Engine を使用して HSM のプライベートキーで CSR に署名します。これにより、自己署名証明書が作成されます。コマンドの以下の値を独自の値に置き換えます。

    • <web_server.csr> - CSR を含むファイルの名前です。

    • <web_server_fake_pem.key> - フェイク PEM プライベートキーが含まれるファイルの名前です。

    • <web_server.crt> - ウェブサーバー証明書が含まれるファイルの名前です。

    $ openssl x509 -engine cloudhsm -req -days 365 -in <web_server.csr> -signkey <web_server_fake_pem.key> -out <web_server.crt>

プライベートキーと証明書を取得したら、「」に進みますステップ 3: ウェブサーバーを設定する

ステップ 3: ウェブサーバーを設定する

前のステップで作成した HTTPS 証明書とフェイク PEM プライベートキーを使用するようにウェブサーバーソフトウェアの設定を更新します。開始する前に、既存の証明書とキーを必ずバックアップしてください。これにより、SSL/TLS サーバー ID オフロード用の Linux ウェブサーバーソフトウェアの設定は完了します AWS CloudHSM。

次のいずれかのセクションの手順を完了します。

NGINX ウェブサーバーを設定する

このセクションを使用して、OpenSSL プロバイダーで NGINX を設定します。

OpenSSL プロバイダーの NGINX を設定するには
  1. クライアントインスタンスに接続します。

  2. 次のコマンドを実行して、ウェブサーバー証明書とフェイク PEM プライベートキーに必要なディレクトリを作成します。

    $ mkdir -p /etc/pki/nginx/private
  3. 次のコマンドを実行して、ウェブサーバーの証明書を所定場所にコピーします。<web_server.crt> を、ウェブサーバー証明書の名前に置き換えます。

    $ cp <web_server.crt> /etc/pki/nginx/server.crt
  4. 次のコマンドを実行して、フェイク PEM プライベートキーを所定場所にコピーします。<web_server_fake_pem.key> をフェイク PEM プライベートキーが含まれるファイルの名前に置き換えます。

    $ cp <web_server_fake_pem.key> /etc/pki/nginx/private/server.key
  5. 次のコマンドを実行してファイルの所有権を変更し、nginx という名前のユーザーがそれらのファイルを読み取れるようにします。

    $ chown nginx /etc/pki/nginx/server.crt /etc/pki/nginx/private/server.key
  6. AWS CloudHSM プロバイダーを使用するように OpenSSL を設定します。OpenSSL プロバイダーの設定の詳細については、「AWS CloudHSM OpenSSL Provider for Client SDK 5」を参照してください。

    1. OpenSSL 設定ファイルを見つけます。

      $ openssl version -d

      次のような出力が表示されます。

      OPENSSLDIR: "/etc/pki/tls"

      設定ファイルは、このディレクトリopenssl.cnfにあります。

    2. 注記

      システムのデフォルトの openssl.cnf ファイルを直接変更しないでください。これにより、システム全体の OpenSSL オペレーション (SSH、TLS 接続、その他のサービス) が CloudHSM プロバイダーを介して意図せずにルーティングされるのを防ぐことができます。

      別の設定ファイルを使用すると、HSM-backed 暗号化オペレーションを必要とする特定のアプリケーションのみに CloudHSM プロバイダーの使用範囲を設定できます。

      次の内容で新しい OpenSSL 設定ファイルを作成します。

      $ cat > <example-cloudhsm-openssl.cnf> << 'EOF' ## NOTE: This should point to the system default openssl config file. # Replace /etc/pki/tls with the path to your OpenSSL configuration directory .include </etc/pki/tls>/openssl.cnf # Override the existing provider_section to include AWS CloudHSM OpenSSL Provider as a 3rd party OpenSSL provider [provider_sect] default = default_sect # Include AWS CloudHSM CloudHSM OpenSSL provider cloudhsm = cloudhsm_sect [default_sect] activate = 1 [cloudhsm_sect] activate = 1 EOF
    3. CLOUDHSM_PIN 環境変数が Crypto User (CU) 認証情報で設定されていることを確認します。

      $ export CLOUDHSM_PIN=<username>:<password>
    4. 更新された設定ファイルを指すようにOPENSSL_CONF環境変数を設定し、プロバイダーがロードされていることを確認します。

      $ OPENSSL_CONF=/path/to/example-cloudhsm-openssl.cnf openssl list -providers

      デフォルトプロバイダーと CloudHSM プロバイダーの両方が表示されます。

      OPENSSL_CONF=/path/to/example-cloudhsm-openssl.cnf openssl list -providers Providers: default name: OpenSSL Default Provider version: 3.2.2 status: active cloudhsm name: AWS CloudHSM OpenSSL Provider version: 5.17.0 status: active
  7. 次のコマンドを実行して、/etc/nginx/nginx.conf ファイルをバックアップします。

    $ cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup
  8. NGINX の設定を更新します。

    注記

    各クラスターは、すべての NGINX ウェブサーバーで最大 1,000 の NGINX ワーカープロセスをサポートできます。

    Amazon Linux 2023

    テキストエディタを使用して、/etc/nginx/nginx.conf ファイルを編集します。これには、Linux ルートのアクセス許可が必要になる場合があります。ファイルの先頭に、次の行を追加します。

    env CLOUDHSM_PIN; env OPENSSL_CONF;

    次に、ファイルの TLS セクションに次の内容を追加します。

    # Settings for a TLS enabled server. server { listen 443 ssl http2 default_server; listen [::]:443 ssl http2 default_server; server_name _; root /usr/share/nginx/html; ssl_certificate "/etc/pki/nginx/server.crt"; ssl_certificate_key "/etc/pki/nginx/private/server.key"; # It is *strongly* recommended to generate unique DH parameters for DHE ciphers # Generate them with: openssl dhparam -out /etc/pki/nginx/dhparams.pem 2048 # ssl_dhparam "/etc/pki/nginx/dhparams.pem"; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256"; ssl_prefer_server_ciphers off; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
    RHEL 9 (9.2+)

    テキストエディタを使用して、/etc/nginx/nginx.conf ファイルを編集します。これには、Linux ルートのアクセス許可が必要になる場合があります。ファイルの先頭に、次の行を追加します。

    env CLOUDHSM_PIN; env OPENSSL_CONF;

    次に、ファイルの TLS セクションに次の内容を追加します。

    # Settings for a TLS enabled server. server { listen 443 ssl http2 default_server; listen [::]:443 ssl http2 default_server; server_name _; root /usr/share/nginx/html; ssl_certificate "/etc/pki/nginx/server.crt"; ssl_certificate_key "/etc/pki/nginx/private/server.key"; # It is *strongly* recommended to generate unique DH parameters for DHE ciphers # Generate them with: openssl dhparam -out /etc/pki/nginx/dhparams.pem 2048 # ssl_dhparam "/etc/pki/nginx/dhparams.pem"; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256"; ssl_prefer_server_ciphers off; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
    RHEL 10 (10.0+)

    テキストエディタを使用して、/etc/nginx/nginx.conf ファイルを編集します。これには、Linux ルートのアクセス許可が必要になる場合があります。ファイルの先頭に、次の行を追加します。

    env CLOUDHSM_PIN; env OPENSSL_CONF;

    次に、ファイルの TLS セクションに次の内容を追加します。

    # Settings for a TLS enabled server. server { listen 443 ssl http2 default_server; listen [::]:443 ssl http2 default_server; server_name _; root /usr/share/nginx/html; ssl_certificate "/etc/pki/nginx/server.crt"; ssl_certificate_key "/etc/pki/nginx/private/server.key"; # It is *strongly* recommended to generate unique DH parameters for DHE ciphers # Generate them with: openssl dhparam -out /etc/pki/nginx/dhparams.pem 2048 # ssl_dhparam "/etc/pki/nginx/dhparams.pem"; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256"; ssl_prefer_server_ciphers off; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
    Ubuntu 24.04

    テキストエディタを使用して、/etc/nginx/nginx.conf ファイルを編集します。これには、Linux ルートのアクセス許可が必要になる場合があります。ファイルの先頭に、次の行を追加します。

    env CLOUDHSM_PIN; env OPENSSL_CONF;

    次に、ファイルの TLS セクションに次の内容を追加します。

    # Settings for a TLS enabled server. server { listen 443 ssl http2 default_server; listen [::]:443 ssl http2 default_server; server_name _; root /var/www/html; ssl_certificate "/etc/ssl/certs/server.crt"; ssl_certificate_key "/etc/ssl/private/server.key"; # It is *strongly* recommended to generate unique DH parameters for DHE ciphers # Generate them with: openssl dhparam -out /etc/ssl/certs/dhparams.pem 2048 # ssl_dhparam "/etc/ssl/certs/dhparams.pem"; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256"; ssl_prefer_server_ciphers off; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }

    ファイルを保存します。

  9. systemd 設定ファイルをバックアップしてから、EnvironmentFile パスを設定します。

    Amazon Linux 2023
    1. nginx.service ファイルをバックアップします。

      $ cp /lib/systemd/system/nginx.service /lib/systemd/system/nginx.service.backup
    2. テキストエディタで /lib/systemd/system/nginx.service を開きます。[サービス] セクションで、以下を追加します。

      EnvironmentFile=/etc/sysconfig/nginx
    RHEL 9 (9.2+)
    1. nginx.service ファイルをバックアップします。

      $ cp /lib/systemd/system/nginx.service /lib/systemd/system/nginx.service.backup
    2. テキストエディタで /lib/systemd/system/nginx.service を開きます。[サービス] セクションで、以下を追加します。

      EnvironmentFile=/etc/sysconfig/nginx
    RHEL 10 (10.0+)
    1. nginx.service ファイルをバックアップします。

      $ cp /lib/systemd/system/nginx.service /lib/systemd/system/nginx.service.backup
    2. テキストエディタで /lib/systemd/system/nginx.service を開きます。[サービス] セクションで、以下を追加します。

      EnvironmentFile=/etc/sysconfig/nginx
    Ubuntu 24.04
    1. nginx.service ファイルをバックアップします。

      $ cp /lib/systemd/system/nginx.service /lib/systemd/system/nginx.service.backup
    2. テキストエディタで /lib/systemd/system/nginx.service を開きます。[サービス] セクションで、以下を追加します。

      EnvironmentFile=/etc/sysconfig/nginx
  10. /etc/sysconfig/nginx ファイルの存在を確認してから、次のいずれかを実行します。

    • ファイルが存在する場合は、次のコマンドを実行してファイルをバックアップします。

      $ cp /etc/sysconfig/nginx /etc/sysconfig/nginx.backup
    • ファイルが存在しない場合は、テキストエディタを開き、/etc/sysconfig/ フォルダ内に nginx という名前のファイルを作成します。

  11. NGINX 環境を設定します。

    Amazon Linux 2023

    Linux ルートユーザーとして、テキストエディタで /etc/sysconfig/nginx ファイルを開きます。例えば、

    vi /etc/sysconfig/nginx

    Cryptography User (CU) 認証情報と OpenSSL 設定ファイルへのパスを追加します。

    CLOUDHSM_PIN=<CU user name>:<password> OPENSSL_CONF=<path to example-cloudhsm-openssl.cnf>

    <CU ユーザー名><パスワード> を CU の認証情報に置き換えます。<example-cloudhsm-openssl.cnf> へのパスを、 で作成した設定ファイルへのフルパスに置き換えますOpenSSL プロバイダーの NGINX を設定するには

    ファイルを保存します。

    RHEL 9 (9.2+)

    テキストエディタで /etc/sysconfig/nginx ファイルを開きます。これには、Linux ルートのアクセス許可が必要になる場合があります。Cryptography User (CU) 認証情報と OpenSSL 設定ファイルへのパスを追加します。

    CLOUDHSM_PIN=<CU user name>:<password> OPENSSL_CONF=<path to example-cloudhsm-openssl.cnf>

    <CU ユーザー名><パスワード> を CU の認証情報に置き換えます。<example-cloudhsm-openssl.cnf> へのパスを、 で作成した設定ファイルへのフルパスに置き換えますOpenSSL プロバイダーの NGINX を設定するには

    ファイルを保存します。

    RHEL 10 (10.0+)

    テキストエディタで /etc/sysconfig/nginx ファイルを開きます。これには、Linux ルートのアクセス許可が必要になる場合があります。Cryptography User (CU) 認証情報と OpenSSL 設定ファイルへのパスを追加します。

    CLOUDHSM_PIN=<CU user name>:<password> OPENSSL_CONF=<path to example-cloudhsm-openssl.cnf>

    <CU ユーザー名><パスワード> を CU の認証情報に置き換えます。<example-cloudhsm-openssl.cnf> へのパスを、 で作成した設定ファイルへのフルパスに置き換えますOpenSSL プロバイダーの NGINX を設定するには

    ファイルを保存します。

    Ubuntu 24.04

    テキストエディタで /etc/sysconfig/nginx ファイルを開きます。これには、Linux ルートのアクセス許可が必要になる場合があります。Cryptography User (CU) 認証情報と OpenSSL 設定ファイルへのパスを追加します。

    CLOUDHSM_PIN=<CU user name>:<password> OPENSSL_CONF=<path to example-cloudhsm-openssl.cnf>

    <CU ユーザー名><パスワード> を CU の認証情報に置き換えます。<example-cloudhsm-openssl.cnf> へのパスを、 で作成した設定ファイルへのフルパスに置き換えますOpenSSL プロバイダーの NGINX を設定するには

    ファイルを保存します。

  12. NGINX ウェブサーバーを起動します。

    Amazon Linux 2023

    すべての NGINX プロセスを停止する

    $ systemctl stop nginx

    systemd 設定をリロードして最新の変更を取得する

    $ systemctl daemon-reload

    NGINX を開始する

    $ systemctl start nginx
    RHEL 9 (9.2+)

    実行中の NGINX プロセスをすべて停止する

    $ systemctl stop nginx

    systemd 設定をリロードして最新の変更を取得する

    $ systemctl daemon-reload

    NGINX プロセスを開始する

    $ systemctl start nginx
    RHEL 10 (10.0+)

    実行中の NGINX プロセスをすべて停止する

    $ systemctl stop nginx

    systemd 設定をリロードして最新の変更を取得する

    $ systemctl daemon-reload

    NGINX プロセスを開始する

    $ systemctl start nginx
    Ubuntu 24.04

    実行中の NGINX プロセスをすべて停止する

    $ systemctl stop nginx

    systemd 設定をリロードして最新の変更を取得する

    $ systemctl daemon-reload

    NGINX プロセスを開始する

    $ systemctl start nginx

NGINX を設定したら、 に移動します設定した証明書が HTTPS で使用されていることを検証する

HAProxy ウェブサーバーを設定する

このセクションを使用して、OpenSSL プロバイダーで HAProxy を設定します。次の例は、CloudHSM 証明書とキーを使用して HAProxy をセットアップする方法を示しています。

OpenSSL プロバイダーの HAProxy を設定するには OpenSSL
  1. 既存の結合証明書ファイルが存在する場合は、バックアップします。

    $ cp server-combined.pem server-combined.pem.backup
  2. 証明書と CloudHSM フェイク PEM キーを使用して HAProxy 用の結合証明書ファイルを作成します。

    $ cat server.crt server.key > server-combined.pem
  3. 既存の HAProxy 設定をバックアップします。

    $ cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.backup
  4. で新しい CloudHSM TLS オフロード設定を作成します/etc/haproxy/haproxy.cfg

    global daemon ssl-provider cloudhsm # It is *strongly* recommended to generate unique DH parameters # Generate them with: openssl dhparam -out /etc/haproxy/dhparams.pem 2048 # ssl-dh-param-file /etc/haproxy/dhparams.pem ssl-default-bind-ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305 ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256 ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets defaults mode http timeout connect 5000ms timeout client 50000ms timeout server 50000ms frontend haproxy_frontend bind *:443 ssl crt /path/to/server-combined.pem default_backend web_servers backend web_servers server web1 127.0.0.1:8080 check

    ファイルの場所に合わせて証明書パスを更新します。

  5. HAProxy の環境ファイルを使用するように systemd を設定します。場所は Linux ディストリビューションによって異なります。

    Amazon Linux and RHEL

    HAProxy サービスファイルをバックアップして変更します。

    $ cp /lib/systemd/system/haproxy.service /lib/systemd/system/haproxy.service.backup

    [サービス] セクションで次の行を編集/lib/systemd/system/haproxy.serviceして追加します。

    EnvironmentFile=/etc/sysconfig/haproxy
    Ubuntu

    HAProxy サービスファイルをバックアップして変更します。

    $ cp /lib/systemd/system/haproxy.service /lib/systemd/system/haproxy.service.backup

    [サービス] セクションで次の行を編集/lib/systemd/system/haproxy.serviceして追加します。

    EnvironmentFile=/etc/default/haproxy
  6. システムに適した場所に環境ファイルを作成します。

    Amazon Linux and RHEL

    HAProxy 環境ファイルが存在する場合はバックアップします。

    $ cp /etc/sysconfig/haproxy /etc/sysconfig/haproxy.backup

    次の内容/etc/sysconfig/haproxyで HAProxy 環境ファイルを作成します。

    CLOUDHSM_PIN=<CU user name>:<password>
    Ubuntu

    HAProxy 環境ファイルが存在する場合はバックアップします。

    $ cp /etc/default/haproxy /etc/default/haproxy.backup

    次の内容/etc/default/haproxyで HAProxy 環境ファイルを作成します。

    CLOUDHSM_PIN=<CU user name>:<password>

    <CU user name><password> を CU 認証情報に置き換えます。

  7. systemd 設定を再ロードします。

    $ systemctl daemon-reload
  8. CloudHSM TLS オフロード設定を使用して HAProxy を開始します。

    $ systemctl start haproxy

    HAProxy は、カスタム設定ファイルを使用して直接実行することもできます。

    $ haproxy -f /path/to/haproxy-cloudhsm.cfg

HAProxy を設定したら、 に移動します設定した証明書が 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. HTTPS を使用してウェブサーバーに接続するには、次の OpenSSL コマンドを実行します。<サーバー名> は、ウェブサーバーの公開 DNS 名または IP アドレスに置き換えます。

    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 に保存されます。

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