アマゾンウェブサービス のロードバランサ(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から行う
使用するもの
- AWS / ELB ( ロードバランサー )
- Powered BLUE プライベート CA ( 自己認証局 / AWSで運用 )
- Powered BLUE Web サーバー( SSLクライアント認証 & Web / AWSで運用)
- Powered BLUE Private CAはAWSへ登録のAMI (EC2) を選択
- Powered BLUE WebサーバーはAWSへ登録のAMI (EC2)を選択
ネットワーク構成
各サーバーの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でアクセスが出来ます。
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クライアント証明書でのアクセスを禁止
SSLクライアント認証のログ
SSLクライアント認証時のアクセスログの出力先を指定出来ます。Webサーバー側でアクセスログを取得出来ます。
一般的なロードバランサーでのSSLクライアント認証の構成例
デモサーバー
Powered BLUEの デモサーバー
終わりに
SSLクライアント認証でWebサイトの認証を強化したい方、詳しい話を聞いてみたい方などは、ムービットの お問い合わせフォーム からご連絡ください。