ステップ 2: プライベートキーと SSL/TLS 証明書を生成またはインポートする - AWS CloudHSM

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

ステップ 2: プライベートキーと SSL/TLS 証明書を生成またはインポートする

HTTPS を有効にするには、ウェブサーバーアプリケーション (NGINX または Apache) にプライベートキーおよび対応する SSL/TLS 証明書が必要です。AWS CloudHSM でウェブサーバー SSL/TLS オフロードを使用するには、プライベートキーを AWS CloudHSM クラスター内の HSM に保存する必要があります。これを行うには、以下のいずれかの方法を使用できます。

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

  • プライベートキーおよび対応する証明書が既にある場合は、そのプライベートキーを HSM 内にインポートします。

前述の方法のどれを選択しても、HSM から フェイク PEM プライベートキーをエクスポートします。これは、HSM に保存されているプライベートキーへの参照を含む PEM 形式のプライベートキーファイルで、実際のプライベートキーではありません。ウェブサーバーは、SSL/TLS オフロード中にフェイク PEM プライベートキーファイルを使用して HSM のプライベートキーを識別します。

プライベートキーと証明書の生成

プライベートキーの生成

このセクションでは、Client SDK 3 のキー管理ユーティリティ (KMU) を使用してキーペアを生成する方法を示します。HSM 内でキーペアを生成したら、それをフェイク PEM ファイルとしてエクスポートし、対応する証明書を生成できます。

キー管理ユーティリティ (KMU) を使用して生成されるプライベートキーは、Client SDK 3 およびクライアント SDK 5 の両方で使用できます。

キー管理ユーティリティ (KMU) のインストールと設定
  1. クライアントインスタンスに接続します。

  2. Client SDK 3 の インストールおよび設定

  3. 次のコマンドを使用して AWS CloudHSM クライアントを起動します。

    Amazon Linux
    $ sudo start cloudhsm-client
    Amazon Linux 2
    $ sudo service cloudhsm-client start
    CentOS 7
    $ sudo service cloudhsm-client start
    CentOS 8
    $ sudo service cloudhsm-client start
    RHEL 7
    $ sudo service cloudhsm-client start
    RHEL 8
    $ sudo service cloudhsm-client start
    Ubuntu 16.04 LTS
    $ sudo service cloudhsm-client start
    Ubuntu 18.04 LTS
    $ sudo service cloudhsm-client start
    Ubuntu 20.04 LTS
    $ sudo service cloudhsm-client start
    Ubuntu 22.04 LTS

    OpenSSL Dynamic Engine はまだサポートされていません。

  4. 次のコマンドを使用して、key_mgmt_util コマンドラインツールを起動します。

    $ /opt/cloudhsm/bin/key_mgmt_util
  5. 次のコマンドを実行して HSM にログインします。<user name><password> を、暗号化ユーザー (CU) のユーザー名とパスワードに置き換えます。

    Command: loginHSM -u CU -s <user name> -p <password>>

プライベートキーの生成

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

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

    genRSAKeyPair コマンドを使用して RSA キー ペアを生成します。この例では、モジュールが 2048、公開指数が65537、ラベルが tls_rsa_keypair の RSA キーペアを生成します。

    Command: genRSAKeyPair -m 2048 -e 65537 -l tls_rsa_keypair

    コマンドが成功すると、RSA キーペアが正常に生成されることを示す次のような出力が表示されます。

    Cfm3GenerateKeyPair returned: 0x00 : HSM Return: SUCCESS Cfm3GenerateKeyPair: public key handle: 7 private key handle: 8 Cluster Status: Node id 1 status: 0x00000000 : HSM Return: SUCCESS
  • HSM で EC プライベートキーを生成するには

    genECCKeyPair コマンドを使用して EC キーペアを生成します。この例では、カーブ ID が 2 (NID_X9_62_prime256v1 カーブに対応) で、ラベルが tls_ec_keypair の EC キーペアを生成します。

    Command: genECCKeyPair -i 2 -l tls_ec_keypair

    コマンドが成功すると、EC キーペアが正常に生成されることを示す次のような出力が表示されます。

    Cfm3GenerateKeyPair returned: 0x00 : HSM Return: SUCCESS Cfm3GenerateKeyPair: public key handle: 7 private key handle: 8 Cluster Status: Node id 1 status: 0x00000000 : HSM Return: SUCCESS

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

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

注記

キー管理ユーティリティ (KMU) を使用して生成されるフェイク PEM ファイルは、Client SDK 3 およびクライアント SDK 5 の両方で使用できます。

フェイク PEM としてエクスポートするキーに対応するキーハンドルを特定し、次のコマンドを実行してプライベートキーを偽の PEM 形式でエクスポートし、ファイルに保存します。以下の値は独自の値に置き換えてください。

  • <private_key_handle> - 生成したプライベートキーのハンドルです。このハンドルは、前の手順のキー生成コマンドの 1 つによって生成されました。前の例で生成したプライベートキーのハンドルは 8 です。

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

Command: getCaviumPrivKey -k <private_key_handle> -out <web_server_fake_PEM.key>

Exit

次のコマンドを実行して key_mgmt_util を停止します。

Command: exit

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

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

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

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

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

警告

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

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

  2. インストールして設定を行うには、以下のいずれかを実行します。

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

  2. CSR を作成する

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

    req コマンドは対話的です。各フィールドに対応します。このフィールド情報は、SSL/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: ウェブサーバーを設定する」に進みます。

既存のプライベートキーと証明書をインポートします

ウェブサーバーの HTTPS 用のプライベートキーおよび対応する SSL/TLS 証明書がすでにある場合があります。その場合、このセクションの手順に従って、そのキーを HSM にインポートすることができます。

注記

プライベートキーのインポートとクライアント SDKの互換性についてのいくつかの注意事項:

  • 既存のプライベートキーをインポートするには、クライアント SDK 3 が必要です。

  • クライアント SDK 5 では、クライアント SDK 3 のプライベートキーを使用できます。

  • クライアント SDK 3 の OpenSSL 動的エンジンは、最新の Linux プラットフォームをサポートしていませんが、クライアント SDK 5 の OpenSSL 動的エンジンの実装はサポートしています。Client SDK 3 で提供されるキー管理ユーティリティ (KMU) を使用して既存のプライベートキーをインポートしてから、そのプライベートキーとクライアント SDK 5 での OpenSSL Dynamic Engine の実装を使用して、最新の Linux プラットフォームで SSL/TLS オフロードをサポートできます。

Client SDK 3 で既存のプライベートキーを HSM にインポートするには
  1. Amazon EC2 クライアントインスタンスに接続します。必要に応じて、既存のプライベートキーと証明書をインスタンスにコピーします。

  2. Client SDK 3 の インストールおよび設定

  3. 次のコマンドを使用して AWS CloudHSM クライアントを起動します。

    Amazon Linux
    $ sudo start cloudhsm-client
    Amazon Linux 2
    $ sudo service cloudhsm-client start
    CentOS 7
    $ sudo service cloudhsm-client start
    CentOS 8
    $ sudo service cloudhsm-client start
    RHEL 7
    $ sudo service cloudhsm-client start
    RHEL 8
    $ sudo service cloudhsm-client start
    Ubuntu 16.04 LTS
    $ sudo service cloudhsm-client start
    Ubuntu 18.04 LTS
    $ sudo service cloudhsm-client start
    Ubuntu 20.04 LTS
    $ sudo service cloudhsm-client start
    Ubuntu 22.04 LTS

    OpenSSL Dynamic Engine はまだサポートされていません。

  4. 次のコマンドを使用して、key_mgmt_util コマンドラインツールを起動します。

    $ /opt/cloudhsm/bin/key_mgmt_util
  5. 次のコマンドを実行して HSM にログインします。<user name><password> を、暗号化ユーザー (CU) のユーザー名とパスワードに置き換えます。

    Command: loginHSM -u CU -s <user name> -p <password>
  6. 次のコマンドを実行して、プライベートキーを HSM 内にインポートします。

    1. 次のコマンドを実行して、現在のセッションでのみ有効な対称ラップキーを作成します。コマンドと出力が表示されます。

      Command: genSymKey -t 31 -s 16 -sess -l wrapping_key_for_import Cfm3GenerateSymmetricKey returned: 0x00 : HSM Return: SUCCESS Symmetric Key Created. Key Handle: 6 Cluster Error Status Node id 0 and err state 0x00000000 : HSM Return: SUCCESS
    2. 次のコマンドを実行して、既存のプライベートキーを HSM 内にインポートします。コマンドと出力が表示されます。以下の値は独自の値に置き換えてください。

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

      • <web_server_imported_key> - インポートしたプライベートキーのラベルです。

      • <wrapping_key_handle> - 前述のコマンドで生成したラップキーのハンドルです。前の例で生成したラップキーのハンドルは 6 です。

      Command: importPrivateKey -f <web_server_existing.key> -l <web_server_imported_key> -w <wrapping_key_handle> BER encoded key length is 1219 Cfm3WrapHostKey returned: 0x00 : HSM Return: SUCCESS Cfm3CreateUnwrapTemplate returned: 0x00 : HSM Return: SUCCESS Cfm3UnWrapKey returned: 0x00 : HSM Return: SUCCESS Private Key Unwrapped. Key Handle: 8 Cluster Error Status Node id 0 and err state 0x00000000 : HSM Return: SUCCESS
  7. 次のコマンドを実行して、プライベートキーをフェイク PEM 形式でエクスポートしてファイルに保存します。以下の値は独自の値に置き換えてください。

    • <private_key_handle> - インポートしたプライベートキーのハンドルです。このハンドルは、前のステップで 2 番目のコマンドで生成したものです。前の例で生成したプライベートキーのハンドルは 8 です。

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

    Command: getCaviumPrivKey -k <private_key_handle> -out <web_server_fake_PEM.key>
  8. 次のコマンドを実行して key_mgmt_util を停止します。

    Command: exit

以上のステップが完了したら、「ステップ 3: ウェブサーバーを設定する」に進みます。