相互認証を使用して HTTPS リスナーを追加するには、リスナーを設定するときにサーバー証明書と CA 証明書を SLB にアップロードする必要があります。

このチュートリアルでは、自己署名 CA 証明書を使用してクライアント証明書に署名します。 相互認証を使用して HTTPS リスナーを追加するには、以下のステップを実行します。

  1. サーバー証明書の準備
  2. Open SSL を使用してCA 証明書を生成
  3. クライアント証明書の生成
  4. サーバー証明書とCA 証明書のアップロード
  5. クライアント証明書のインストール
  6. HTTPS リスナーの設定 (相互認証)
  7. SLB サービスのテスト

ステップ 1 サーバー証明書の準備

サーバー証明書は、サーバーから送信された証明書が信頼できるセンターによって署名、発行されているかどうかをクライアントブラウザーで確認するために使用されます。 サーバー証明書は Alibaba Cloud Security の Certificate Service、または他のサービスプロバイダーから購入できます。

ステップ 2 Open SSL を使用してCA 証明書を生成

  1. 次のコマンドを実行して、/rootディレクトリの下に ca フォルダーを作成し、ca フォルダーの下に 4 つのサブフォルダーを作成します。
    $ sudo mkdir ca
     $ cd ca
     $ sudo mkdir newcerts private conf server

    説明:

    • newcerts フォルダーには、CA 証明書によって署名されたデジタル証明書が保存されます。
    • private フォルダーには、CA 証明書の秘密鍵が保存されます。
    • conf には、パラメーターを単純化するために使用される設定ファイルが保存されます。
    • server フォルダーには、サーバー証明書が保存されます。
  2. 次の情報を含む openssl.conf ファイルを conf ディレクトリに作成します。
    [ ca ]
     default_ca = foo
     [ foo ] 
     dir = /root/ca
     database = /root/ca/index.txt
     new_certs_dir = /root/ca/newcerts
     certificate = /root/ca/private/ca.crt
     serial = /root/ca/serial
     private_key = /root/ca/private/ca.key
     RANDFILE = /root/ca/private/.rand
     default_days = 365
     default_crl_days= 30
     default_md = md5
     Unique_subject = no
     Policy = policy_any
     [ policy_any ]
     countryName = match
     stateOrProvinceName = match
     organizationName = match
     organizationalUnitName = match
     localityName = optional
     commonName = supplied
     Emailaddress = optional
  3. 次のコマンドを実行して、秘密鍵を生成します。
    $ CD/root/CA
     $ sudo openssl genrsa -out private/ca.key

    秘密鍵の生成例を以下に示します。

  4. 次のコマンドを実行し、プロンプトに従って必要な情報を入力します。 Enter キーを押して、証明書の生成に使用される csr ファイルを生成します。
    $ Sudo OpenSSL req-New-key private/CA. Key-out private/CA. CSR
    コモンネーム は、SLB インスタンスのドメイン名です。
  5. 次のコマンドを実行して、crt ファイルを生成します。
    $ sudo openssl x509 -req -days 365 -in private/ca.csr -signkey private/ca.key -out private/ca.crt
  6. 次のコマンドを実行して、秘密鍵の開始シーケンス番号を設定します。シーケンス番号には、任意の 4 文字を使用できます。
    $ sudo echo FACE > serial
  7. 次のコマンドを実行して、CA 鍵ライブラリを作成します。
    $ sudo touch index.txt
  8. 次のコマンドを実行して、クライアント証明書を削除するための証明書失効リストを作成します。
    $ sudo openssl ca -gencrl -out /root/ca/private/ca.crl -crldays 7 -config "/root/ca/conf/openssl.conf"

    出力:

    Using configuration from /root/ca/conf/openssl.conf

ステップ 3 クライアント証明書の生成

  1. 次のコマンドを実行して、ca ディレクトリの下に、クライアントキーを保存する users ディレクトリを生成します。
    $ Sudo mkdir users
  2. 次のコマンドを実行して、クライアント証明書の鍵を作成します。
    $ Sudo OpenSSL FIG/root/CA/users/client. Key 1024
    鍵を作成する際、パスフレーズを入力します。 パスフレーズは、不正なアクセスから秘密鍵を保護するためのパスワードです。 同じパスワードを 2 回入力してください。
  3. 次のコマンドを実行して、証明書の署名をリクエストするための csr ファイルを作成します。
    $ sudo openssl req -new -key /root/ca/users/client.key -out /root/ca/users/client.csr
    指示に従って、前のステップで使用したパスフレーズを入力し、必要な情報を入力します。
    チャレンジパスワードは、クライアント証明書のパスワードです ( client.key のパスワードとは別にしてください。 このチュートリアルでは、パスワードは test です)。 ルート証明書またはサーバー証明書のパスワードと同じにすることができます。
  4. 次のコマンドを実行して、ステップ 2 の CA 鍵を使用してクライアント鍵に署名します。
    $ sudo openssl ca -in /root/ca/users/client.csr -cert /root/ca/private/ca.crt -keyfile /root/ca/private/ca.key -out /root/ca/users/client.crt -config "/root/ca/conf/openssl.conf"

    操作確認のプロンプトが表示されたら、 y を 2 回入力します。

  5. 次のコマンドを実行して、ほとんどのブラウザーで認識可能な PKCS12 ファイルに変換します。
    $ sudo openssl pkcs12 -export -clcerts -in /root/ca/users/client.crt -inkey /root/ca/users/client.key -out /root/ca/users/client.p12

    プロンプトに従ってクライアント鍵のパスフレーズを入力します。

    クライアント証明書のエクスポートに使用するパスワードを入力します。 これはクライアント証明書を保護するためのパスワードで、クライアント証明書をインストールするときに必要です。

  6. 生成されたクライアント証明書を表示するには、次のコマンドを実行します。
    cd users
     ls

ステップ 4 サーバー証明書と CA 証明書のアップロード

  1. SLB コンソールにログインします。
  2. [Server Load Balancer] ページで、[SLB インスタンスの作成] をクリックします。
  3. インスタンスを設定し、[今すぐ購入] をクリックします。

    このチュートリアルでは、インスタンスタイプは [インターネット]、リージョンは [中国 (杭州)] です。 詳しくは「SLB インスタンスの作成」をご参照ください。

  4. [Server Load Balancer] ページに戻り、マウスをインスタンス名の領域の上に合わせ、表示された鉛筆のアイコンをクリックして、SLB インスタンスの名前を変更します。
  5. 左側のナビゲーションウィンドウで、[証明書] タブをクリックします。
  6. [証明書のアップロード] をクリックします。
  7. [証明書の作成] ページで、次の設定を行い、[OK] をクリックします。
    • リージョン: このチュートリアルでは、[中国 (杭州)] を選択します。
      証明書のリージョンは、Server Load Balancer インスタンスのリージョンと同じでなければなりません。
    • 証明書タイプ: [サーバー証明書] を選択します。
    • 証明書の内容と秘密鍵: サーバー証明書の内容と秘密鍵をコピーします。
      コンテンツをコピーする前に、[サンプルのインポート] をクリックして有効な証明書形式と秘密鍵形式を表示します。 詳しくは、「証明書の要件」をご参照ください。
  8. 左側のナビゲーションウィンドウで、[証明書] をクリックし、[証明書の作成] をクリックして CA 証明書をアップロードします。
  9. [証明書の作成] ページで、次の設定を行い、[OK] をクリックします。
    • リージョン: このチュートリアルでは、[中国 (杭州)] を選択します。
      証明書のリージョンは、Server Load Balancer インスタンスのリージョンと同じでなければなりません。
    • 証明書タイプ: [CA 証明書] を選択します。
    • 証明書の内容: CA 証明書の内容をコピーします。
      コンテンツをコピーする前に、[サンプルのインポート] をクリックして有効な証明書形式と秘密鍵形式を表示します。 詳しくは、「証明書の要件」をご参照ください。

ステップ 5 クライアント証明書のインストール

生成されたクライアント証明書をインストールします。 このチュートリアルでは、Windows オペレーティングシステムと IE Web ブラウザーを例として使用します。
  1. Git Bash コマンドラインウィンドウを開き、次のコマンドを実行してステップ 3 で生成したクライアント証明書をエクスポートします。
    scp root@IPaddress:/root/ca/users/client.p12 . /
    IPaddress は、クライアント証明書が生成されたサーバーの IP です。
  2. 証明書を IE Web ブラウザーにインポートします。
    1. IE Web ブラウザーを開き、[インターネットオプション] > [設定] をクリックします。
    2. [コンテンツ] タブをクリックし、[証明書] をクリックして、ダウンロードしたクライアント証明書をインポートします。 証明書をインポートするとき、PKCS12 ファイルのパスワードを入力してください。

ステップ 6 HTTPS リスナーの設定 (相互認証)

  1. SLB コンソールにログインします。
  2. [中国 (杭州)] リージョンを選択して、作成した SLB インスタンスの ID をクリックするか、[リスナーの設定] をクリックします。
  3. [リスナー] タブをポイントして[リスナーの追加] をクリックします。
  4. [プロトコルとリスナー] タブで、リスナーを設定します。
    • リスナープロトコルの選択: HTTPS
    • リスニングポート: 443
    • スケジューリングアルゴリズム: ラウンドロビン (RR)
  5. [次へ] をクリックします。 [SSL 証明書] タブで、SSL 証明書を設定し、相互認証を有効にします。
    • サーバー証明書: アップロードしたサーバー証明書を選択します。
    • CA 証明書: アップロードした CA 証明書を選択します。
  6. [次へ] をクリックします。 表示されたページで、[デフォルトのサーバーグループ] をクリックし、[追加] をクリックします。 ECS インスタンスを追加し、バックエンドポートを 80 に設定します。
  7. [次へ] をクリックしてヘルスチェックを有効にします。
  8. [次へ] をクリックしてリスナー設定を表示します。
  9. [送信] をクリックします。
  10. [OK] をクリックします。

ステップ 7 SLB サービスのテスト

  1. [Server Load Balancer] ページに戻り、ヘルスチェックステータスを表示します。 ステータスが [正常] の場合、バックエンドサーバーは SLB リスナーによって転送されたリクエストを受信できます。
  2. Web ブラウザーに Server Load Balancer インスタンスのパブリック IP アドレスを入力し、クライアント証明書を信頼するかどうかを尋ねるメッセージが表示されたら、[信頼] を選択します。
  3. Web ページをリフレッシュすると、リクエストがバックエンドサーバーに均等に分散されていることがわかります。