AWSのELB/ロードバランサ配下でWebのSSLクライアント認証をする/アクセスログも取得

アマゾンウェブサービス のロードバランサ(ELB) 配下のWebサーバーで負荷分散&冗長構成でSSLクライアント認証を行う場合の例です。

AWSのELBではSSL通信を通過させて、EC2/Webサーバー側でSSLクライアント認証を行います。SSLクライアント認証時のアクセスログもWebサーバー側で取得することが出来ます。

ロードバランサでは、SSLのサービスを通過させるだけなので、Amazon Web Services のElastic Load Balancingに限らず一般的なロードバランサーでも簡単に同様の運用が出来ます。

AWSに限らず、ロードバランサーとSSLクライアント認証を組み合わせる場合や、終端までSSL通信を行う場合には便利な構成です。SSLのアクセスログも取得します。

 

運用のパターン

  • AWS / ELBを利用して負荷分散&冗長構成でSSLクライアント認証の運用を行う
  • SSLクライアント認証は、Webサーバー側で行う
  • ELBではTCP 443からTCP 443への転送
  • ELB / ロードバランサーでSSLをターミネートしない
  • SSLのサーバー証明書は、ロードバランサーにはインストールしない
  • SSLのサーバー証明書は、Webサーバーにインストールする
  • クライアントからWebサーバーまでの全経路で常時SSL通信(https)を行う
  • SSLクライアント認証のログはWebサーバー側で取得する

AWSでの構築方針

  • プライベートCAを構築 (アプライアンスサーバー:AMI対応)
  • Webサーバーを構築 (アプライアンスサーバー:AMI対応)
  • WebサーバーへCAからCRL(失効リスト)を配布
  • SSLサーバー証明書は、Webサーバーにインストール
  • SSLサーバー証明書は、プライベート&パブリックの両方に対応
  • サーバーの設定は、全てWeb GUIから行う

 

使用するもの

http://www.mubit.co.jp/products/blue/imgs/Powered-by-Amazon-Web-Services.jpg

 

ネットワーク構成

各サーバーのIPアドレスは、自動で付与されるIPを利用できます。IPアドレスは便宜的に表示

  • CA Server  http://ca-server.mubit.com  IP=10.0.0.X
  • https Web Server No1  B860-LB1  IP=10.0.0.Y
  • https Web Server No2  B860-LB2  IP=10.0.0.Z

 

Powered BLUE Webサーバーの設定

Amazon AWSに登録のAMIからPowered BLUE サーバーをセットアップします。VPCなどで2台のWebサーバーを構築します

  • B860-LB1
  • B860-LB2

Webサーバーの設定

それぞれのWebサーバーへホームページのデータを入れます

B860-LB1 ( SSLクライアント認証用のhttps Web サーバーNo1 )

B860-LB1 ( SSLクライアント認証用のhttps Web サーバーNo2 )

同一のSSLのサーバー証明書を作成します(1台目のhttpsサーバー)

  • 「自己署名デジタル証明書の作成」 または 「署名リクエストの作成」 で作成します

自己署名デジタル証明書の作成の場合 (プライベートSSLサーバー証明書の場合)

  • 「自己署名デジタル証明書の作成」から必要事項を記入して、SSLを有効にします
  • 自己署名によるSSLのサーバー証明書が登録されます

署名リクエスト (CSR) の作成の場合 (パブリックSSLサーバー証明書の場合)

公的なSSLサーバー証明書を利用の場合には、ブラウザへの警告メッセージ

「このWebサイトで提示されたセキュリティ証明書は、信頼された証明機関から発行されたものではありません」

を抑制することが出来ます

利用出来るSSLのサーバー証明書は

  •  ドメイン認証証明書(DV:Domain Validation)
  •  組織認証証明書(OV:Organization Validation)
  •  EV証明書(EV:Extended Validation)

などが登録出来ます。Let’s Encrypt のサーバー証明書も利用が出来ます(自動更新に対応)。

  • 必要事項を記入して、 「署名リクエストの作成」 ボタンを押します

  • 作成された 「署名リクエスト」 ファイルを保存
  • この 「署名リクエスト」 ファイル signig-request.txt を、公的なSSLサーバー証明書の発行機関へ送付

  • 公的機関で発行された、サーバー証明書を 「インポート」 します
  • 中間証明書のインポートにも対応しています

サーバー証明書&秘密鍵のエクスポート(1台目のhttpsサーバー)

  • 1台目のサーバーに登録されている、「サーバー証明書&秘密鍵」が含まれているssl-certificate.txtを「エクスポート」

サーバー証明書&秘密鍵のインポート(2台目以降のhttpsサーバー)

  • 1台目のWebサーバーから取り出した 「証明書&秘密鍵」 が含まれている 「ssl-certificate.txt」 を2台目以降のWebサーバーへインポート
  • 1台目の 「サーバー証明書と秘密鍵」 のコピーが2台目にインストールされます

SSLクライアント認証を設定

  • 1台目、2台目ともWebアクセス時の 「SSLクライアント認証」 を有効にします

 

Webサーバー側からCAのCRL自動入手設定

  • CAからCRL(失効リスト)を自動入手出来る設定をします
  • 取得先CA  ( 例 http://ca-server.mubit.com )
  • 同期テストで 「成功」 の場合には、CAからCRLが正常に入手できています

 

プライベートCAの構築

Amazon AWSに登録のAMIからPowered BLUE プライベートCAをセットアップします

SSLクライアント証明書の発行

プライベートCAでSSLクライアント証明書を発行。クライアント証明書は、会社や部門全体での一括発行や、1ユーザーごとの個別の発行が出来ます

 

SSLクライアント証明書を個別発行の場合(1枚発行の場合)

例 suzuki@mubit.com ユーザーのクライアント証明書を作成

有効期限などを指定して発行します

有効期間やポリシーを設定して、部門や全社員の一括発行も出来ます

SSLクライアント証明書をダウンロードします

ダウンロードURLを通知して、ユーザーが個別にダウンロードすることも出来ます

SSLクライアント証明書のブラウザへのインストール(Firefoxの場合)

「証明書を表示」をクリック

「あなたの証明書」のインポートをクリック

SSLクライアント証明のパスワード入れてインストールします

正常にインポート時の表示

証明書マネージャーにインストールしたクライアント証明書が表示されます

SSLクライアント認証の有効化

[クライアント認証を有効にする] ことで、このPowered BLUE の仮想サイトへは、有効なSSLクライアント証明書がインストールされた ブラウザのみ、SSLでアクセスが出来ます。

https://www.mubit.co.jp/plugin/ownCloud/images/setup23.png

 

AWS ELB (Elastic Load Balancing ) の作成

  • ロードバランサ名の設定 (例 LB-80 )
  • ロードバランサの運用ゾーンを選択(例 VPC-19fdd9 (10.0.0.0/16)
  • ロードバランサのプロトコル選択(例 プロトコル TCP / ポート443 )
  • インスタンスのプロトコル選択(例 プロトコル TCP / ポート443 )
  • サブネットの選択(適用するサブネット)

セキュリティグループの設定

 

ELBからWeb(443)のヘルスチェックの設定

  • TCP 443へのping

ELBで負荷分散させるEC2インスタンスの選択

  • B860-LB1 ( Web サーバーNo1 )
  • B860-LB2 ( Web サーバーNo2 )

ヘルスチェックの状況

  • ヘルスチェック TCP=443
  • ステータス InService ( https サーバーの正常動作)
  • アベイラビリティ-ゾーン 正常?(はい)

アクセス

Webサーバーには、ELBのDNSのAレコードでアクセスします

例 https://LB-80-209694.ap-xxxxxxx.com/

SSLクライアント認証例 (承認された場合)

Webへアクセス

  • https://LB-80-209694.ap-xxxxxxx.com/

OKボタンを押すと、SSLクライアント認証後にWebのアクセス画面が表示されます

 

SSLクライアント認証例 (承認されない場合)

有効なSSLクライアント証明書が無いクライアントからのアクセスの場合 ( IPhone )

SSLクライアント認証時のアクセスコントロール

有効なSSLクライアント証明書を有している場合でも、Webサイト毎に各種のアクセスコントロールが設定出来ます
失効リスト(CRL)に関わらず、ただちにWebへのアクセス禁止を設定できます
SSLクライアント証明書を失効させることなく、Webへのアクセスを禁止できます

  • 組織や部門でのアクセス制限
  • 曜日や時間帯でのアクセス制限
  • 特定ユーザーでのアクセス制限
  • 端末を紛失したので、ただちにAさんのSSLクライアント証明書でのアクセスを禁止

https://www.mubit.co.jp/pb-blog/wp-content/uploads/2015/12/ssl-access-3-1.png

SSLクライアント認証のログ

SSLクライアント認証時のアクセスログの出力先を指定出来ます。Webサーバー側でアクセスログを取得出来ます。

https://www.mubit.co.jp/pb-blog/wp-content/uploads/2015/12/ssl-access-2.png

 

一般的なロードバランサーでのSSLクライアント認証の構成例

 

デモサーバー

Powered BLUEの  デモサーバー

 

終わりに

SSLクライアント認証でWebサイトの認証を強化したい方、詳しい話を聞いてみたい方などは、ムービットの https://www.mubit.co.jp/sub/products/blue/img2/arrow-finger.gif お問い合わせフォーム からご連絡ください。