AWS CloudHSM の IIS と CNG を使用した Windows での SSL/TLS オフロード - AWS CloudHSM

AWS CloudHSM の IIS と CNG を使用した Windows での SSL/TLS オフロード

このチュートリアルでは、Windows ウェブサーバーで AWS CloudHSM を使用して SSL/TLS オフロードを設定する手順を説明します。

概要

Windows では、Windows Server 用インターネットインフォメーションサービス (IIS) ウェブサーバーアプリケーションは HTTPS をネイティブにサポートしています。Microsoft の Cryptography API:Next Generation (CNG) の AWS CloudHSM キーストレージプロバイダー (KSP) には、暗号化オフロードとキーストレージ用に、IIS がクラスターの HSM を使用することを許可するインターフェイスが用意されています。AWS CloudHSM KSP は、IIS と AWS CloudHSM クラスターの橋渡しをします。

このチュートリアルでは、以下のことを実行する方法を示します。

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

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

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

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

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

AWS CloudHSM でウェブサーバー SSL/TLS オフロードを設定するには、以下が必要です。

  • 少なくとも 1 つの HSM があるアクティブな AWS CloudHSM クラスター。

  • Windows OS が動作する Amazon EC2 インスタンスで、以下のソフトウェアがインストールされていることを確認します。

    • Windows 用の AWS CloudHSM クライアントソフトウェア。

    • Windows Server 用インターネットインフォメーションサービス (IIS)。

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

注記

このチュートリアルでは Microsoft Windows Server 2016 を使用します。また、Microsoft Windows Server 2012 もサポートされていますが、Microsoft Windows Server 2012 R2 はサポート対象外です。

Windows Server インスタンスをセットアップし、HSM で CU を作成するには
  1. 使用開始方法」のステップを完了します。Amazon EC2 クライアントを起動する場合は、Windows Server 2016 または Windows Server 2012 AMI を選択します。これらのステップを完了すると、少なくとも 1 つの HSM を含むアクティブなクラスターが提供されます。また、Windows用の AWS CloudHSM クライアントソフトウェアがインストールされた Windows Server を実行している Amazon EC2 クライアントインスタンスがあります。

  2. (オプション) 他の HSM をクラスターに追加します。詳細については、「HSM の AWS CloudHSM クラスターへの追加」を参照してください。

  3. Windows Server に接続します。詳細については、「Amazon EC2 ユーザーガイド」の「インスタンスに接続する」を参照してください。

  4. CloudHSM CLI を使用して Crypto User (CU) を作成します。CU のユーザー名とパスワードを書き留めます。次のステップを完了するために必要になります。

    注記

    ユーザーの作成については、「CloudHSM CLI による HSM ユーザーの管理」を参照してください。

  5. 前のステップで作成した CU ユーザー名とパスワードを使用して、HSM のログイン認証情報を設定します

  6. ステップ 5 で、Windows Credential Manager を使用して HSM 認証情報を設定した場合は、SysInternals から psexec.exe をダウンロードして、NT Authority\SYSTEM として以下のコマンドを実行します。

    psexec.exe -s "C:\Program Files\Amazon\CloudHsm\tools\set_cloudhsm_credentials.exe" --username <USERNAME> --password <PASSWORD>

    <USERNAME><PASSWORD> を HSM 認証情報に置き換えてください。

IIS を Windows Server にインストールするには
  1. Windows Server に接続していない場合は、接続します。詳細については、「Amazon EC2 ユーザーガイド」の「インスタンスに接続する」を参照してください。

  2. Windows Server で [サーバーマネージャー] を起動します。

  3. [サーバー マネージャー] ダッシュボードで、[役割と機能の追加] を選択します。

  4. [開始する前に] 情報を読み、[次へ] を選択します。

  5. [インストールのタイプ] ページで、[ロールベースまたは機能ベースのインストール] を選択します。次いで、[次へ] を選択します。

  6. [サーバーの選択] で、[Select a server from the server pool (サーバープールからサーバーを選択する)] を選択します。次いで、[次へ] を選択します。

  7. [Server Roles (サーバーの役割位)] で、以下を実行します。

    1. [Web Server (IIS)] を選択します。

    2. [Add features that are required for Web Server (IIS) (Web Server (IIS) に必要な機能を追加する)] で、[機能の追加] を選択します。

    3. [次へ] を選択してサーバーロールの選択を完了します。

  8. [Features (機能)] を選択し, 、デフォルト設定を使用します。次いで、[次へ] を選択します。

  9. [Web Server Role (IIS)] の内容をお読みください。次いで、[次へ] を選択します。

  10. [Select role services (ロールサービスの追加)] でデフォルトを受け入れるか、必要に応じて設定を変更します。次いで、[次へ] を選択します。

  11. [確認] で確認情報を通読します。次に、[インストール] を選択します。

  12. インストールが完了したら、[Close] をクリックします。

以上のステップが完了したら、「ステップ 2: 証明書署名リクエスト (CSR) および証明書を作成する」に進みます。

ステップ 2: 証明書署名リクエスト (CSR) および証明書を作成する

HTTPS を有効にするには、SSL/TLS 証明書とそれに対応するプライベートキーがウェブサーバーに必要です。AWS CloudHSM で SSL/TLS オフロードを使用するには、プライベートキーを AWS CloudHSM クラスター内の HSM に保存します。そのためには、Microsoft の Cryptography API:Next Generation (CNG) の AWS CloudHSM キーストレージプロバイダー (KSP) を使用して、証明書署名リクエスト (CSR) を作成します。作成したら、その CSR を 証明機関 (CA) に送信します。これで、証明書を生成する CSR に署名されます。

CSR を作成する

CSR を作成するには、Windows Server の AWS CloudHSM KSP を使用します。

CSR を作成するには
  1. Windows Server に接続していない場合は、接続します。詳細については、「Amazon EC2 ユーザーガイド」の「インスタンスに接続する」を参照してください。

  2. 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
    Windows
    • Windows クライアント 1.1.2+ の場合:

      C:\Program Files\Amazon\CloudHSM>net.exe start AWSCloudHSMClient
    • Windows クライアント 1.1.1 以前の場合。

      C:\Program Files\Amazon\CloudHSM>start "cloudhsm_client" cloudhsm_client.exe C:\ProgramData\Amazon\CloudHSM\data\cloudhsm_client.cfg
  3. Windows Server では、テキストエディタを使用して証明書リクエストファイルを作成し、名前を IISCertRequest.inf とします。IISCertRequest.inf ファイルの内容の例を以下に示します。ファイルで指定可能なセクション、キー、値の詳細については、「Microsoft のドキュメント」を参照してください。値 (ProviderName) は変更しないでください。

    [Version] Signature = "$Windows NT$" [NewRequest] Subject = "CN=example.com,C=US,ST=Washington,L=Seattle,O=ExampleOrg,OU=WebServer" HashAlgorithm = SHA256 KeyAlgorithm = RSA KeyLength = 2048 ProviderName = "Cavium Key Storage Provider" KeyUsage = 0xf0 MachineKeySet = True [EnhancedKeyUsageExtension] OID=1.3.6.1.5.5.7.3.1
  4. Windows の certreq コマンドを使用して、前のステップで作成した IISCertRequest.inf ファイルから CSR を作成します。以下の例では、CSR を IISCertRequest.csr という名前のファイルに保存します。証明書リクエストファイルに別のファイル名を使用した場合は、IISCertRequest.inf を適切なファイル名に置き換えます。CSR ファイルの IISCertRequest.csr は、必要に応じて、別のファイル名に置き換えることができます。

    C:\>certreq -new IISCertRequest.inf IISCertRequest.csr SDK Version: 2.03 CertReq: Request Created

    IISCertRequest.csr ファイルには、CSR が含まれます。署名証明書を取得するには、この CSR が必要です。

署名証明書を取得してインポートする

本稼働環境では、通常、認証機関 (CA) を使用して CSR から証明書を作成します。CA は、テスト環境では必要ありません。CA を使用する場合は、CSR ファイル (IISCertRequest.csr) を送信後、その CA を使用して署名済み SSL/TLS 証明書を作成します。

CA を使用する代わりに、OpenSSL のようなツールを使用して、自己署名証明書を作成することもできます。

警告

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

次の手順では、自己署名証明書を作成してウェブサーバーの CSR に署名する方法を示します。

自己署名証明書を作成するには
  1. プライベートキーを作成するには、次の OpenSSL コマンドを使用します。SelfSignedCA.key は、必要に応じてプライベートキーを含むファイル名に置き換えることができます。

    openssl genrsa -aes256 -out SelfSignedCA.key 2048 Generating RSA private key, 2048 bit long modulus ......................................................................+++ .........................................+++ e is 65537 (0x10001) Enter pass phrase for SelfSignedCA.key: Verifying - Enter pass phrase for SelfSignedCA.key:
  2. OpenSSL コマンドを使用して、前のステップで作成したプライベートキーで自己署名発行証明書を作成します。これは対話型コマンドです。画面の指示を読み、プロンプトに従います。SelfSignedCA.key を、プライベートキーを含むファイルの名前に置き換えます (異なる場合)。SelfSignedCA.crt は、必要に応じて自己署名証明書を含むファイル名に置き換えることができます。

    openssl req -new -x509 -days 365 -key SelfSignedCA.key -out SelfSignedCA.crt Enter pass phrase for SelfSignedCA.key: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]: State or Province Name (full name) [Some-State]: Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]: Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []: Email Address []:
自己署名証明書を使用してウェブサーバーの CSR に署名するには
  • プライベートキーおよび自己署名証明書を使用して CSR に署名するには、次の OpenSSL コマンドを使用します。以下について、対応データを含むファイルの名前に置き換えます (異なる場合)。

    • IISCertRequest.csr - ウェブサーバーの CSR を含むファイルの名前です。

    • SelfSignedCA.crt - 自己署名証明書を含むファイルの名前です。

    • SelfSignedCA.key - プライベートキーを含むファイルの名前です。

    • IISCert.crt - ウェブサーバーの署名証明書を含むファイルの名前です。

    openssl x509 -req -days 365 -in IISCertRequest.csr \ -CA SelfSignedCA.crt \ -CAkey SelfSignedCA.key \ -CAcreateserial \ -out IISCert.crt Signature ok subject=/ST=IIS-HSM/L=IIS-HSM/OU=IIS-HSM/O=IIS-HSM/CN=IIS-HSM/C=IIS-HSM Getting CA Private Key Enter pass phrase for SelfSignedCA.key:

上記のステップが完了したら、ウェブサーバーの証明書 (IISCert.crt) と署名証明書 (SelfSignedCA.crt) への署名が完了です。これらのファイルがある場合は、「ステップ 3: ウェブサーバーを設定する」を参照してください。

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

前のステップ」の最後に作成した HTTPS 証明書を使用するには、IIS ウェブサイトの設定を更新します。これで、AWS CloudHSM を使用して、SSL/TLS オフロード用に Windows ウェブサーバーソフトウェア (IIS) を設定できます。

自己署名証明書を使用して、CSR に署名した場合は、まずその自己署名証明書を Windows Trusted Root Certification Authorities にインポートする必要があります。

自己署名証明書を Windows Trusted Root Certification Authorities にインポートするには
  1. Windows Server に接続していない場合は、接続します。詳細については、「Amazon EC2 ユーザーガイド」の「インスタンスに接続する」を参照してください。

  2. 自己署名証明書を Windows server にコピーします。

  3. Windows Server で、[コントロールパネル] を開きます。

  4. [Search Control Panel (コントロールパネルを検索)] に certificates と入力します。続いて、[Manage computer certificates (コンピュータ証明書の管理)] を選択します。

  5. [Certificates - Local Computer (証明書 – ローカルコンピュータ)] の [Trusted Root Certification Authorities] を展開します。

  6. [証明書] を右クリックし、[All Tasks (すべてのタスク)]、[インポート] の順に選択します。

  7. [Certificate Import Wizard (証明書インポートウィザード)] で [次へ] を選択します。

  8. [Browse (参照)] を選択後、自己署名証明書を検索して選択します。「このチュートリアルの前のステップ」の手順に従って自己署名証明書を作成した場合、自己署名証明書の名前は、SelfSignedCA.crt です。開く をクリックします。

  9. [Next] を選択します。

  10. [証明書ストア] で、[Place all certificates in the following store (すべての証明書を以下のストアに配置)] を選択します。次に、[Trusted Root Certification Authorities] が [証明書ストア] で選択されていることを確認します。

  11. [Next] を選択し、[Finish] を選択します。

IIS ウェブサイトの設定を更新するには
  1. Windows Server に接続していない場合は、接続します。詳細については、「Amazon EC2 ユーザーガイド」の「インスタンスに接続する」を参照してください。

  2. AWS CloudHSM クライアントデーモンを起動します。

  3. このチュートリアルの前のステップ の最後に作成したウェブサーバーの署名付き証明書を、Windowsサーバーにコピーします。

  4. Windows Server では、Windows の certreq コマンドを使用して、以下の例のように署名証明書を受け入れます。IISCert.crt をウェブサーバーの署名証明書を含むファイルの名前に置き換えます。

    C:\>certreq -accept IISCert.crt SDK Version: 2.03
  5. Windows Server で [サーバーマネージャー] を起動します。

  6. [Server Manager] ダッシュボードの右上隅で、[ツール]、[Internet Information Services (IIS) Manager] の順に選択します。

  7. [Internet Information Services (IIS) Manager] ウィンドウで、サーバー名をダブルクリックします。次に、[Sites (サイト)] をダブルクリックします。ウェブサイトを選択します。

  8. [SSL Settings (SSL 設定)] を選択します。ウィンドウの右側の [Bindings (バインディング)] を選択します。

  9. [Site Bindings] ウィンドウで、[追加] を選択します。

  10. [Type (タイプ)] で、[https] を選択します。[SSL 証明書] で、「このチュートリアルの前のステップ」の最後に作成した HTTPS 証明書を選択します。

    注記

    証明書のバインディング中にエラーが発生した場合は、サーバーを再起動し、このステップを再試行します。

  11. [OK] を選択します。

ウェブサイトの設定を更新したら、「ステップ 4: HTTPS トラフィックを有効にして証明書を検証する」に移動します。

ステップ 4: HTTPS トラフィックを有効にして証明書を検証する

AWS CloudHSM でウェブサーバーを SSL/TLS オフロード用に設定したら、ウェブサーバーインスタンスを、インバウンドの 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. [Save] を選択します。

設定した証明書が 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 に保管されています。

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