富士通が運用するOpenStackのクラウド基盤「FUJITSU Hybrid IT Service FJcloud-O」 (旧名称 4OSS / K5)のロードバランサ配下のWebサーバーで
- 冗長構成のSSLクライアント認証&リバースプロキシ( Reverse Proxy )
- クライアントから終端のWebサーバーまで、全経路での常時SSL通信
を行う場合の構成例です。
Client ⇒ ( 443 ) ⇒ LB ⇒ ( 443 ) ⇒ SSLクライアント認証&リバースプロキシ ⇒ ( 443 / 80 ) ⇒ Web
OpenStackのロードバランサー/ LBaaS v2 では、SSLのサービスを通過させるだけでオフロードをせずにリバースプロキシでSSLクライアント認証を行ないます。ロードバランサーにはSSLサーバー証明書の登録は必要ありません。
SSLクライアント認証後のリバースプロキシにより、最終のWebサーバーまで全経路にわたりSSL/TLSでの通信を行う構成です。リバースプロキシ先のWebサーバを外部から隠ぺいし安全性を高めることが出来ます。
1)SSLクライアント認証&リバースプロキシの冗長構成(Private CAは分離構成)
構築方針
1)SSLクライアント認証&リバースプロキシの冗長構成
- OpenStackのロードバランサー(LBaaS v2)でSSLをターミネートしない
- ロードバランサーを利用して負荷分散&冗長構成の運用を行う
- ロードバランサーではTCP 443からTCP 443への転送
- クライアントからWebサーバーまでの全経路で常時SSL通信(https)を行う
- Private CA (認証局)は、OpenStack上で運用する
- SSLクライアント端末認証は、リバースプロキシ側で行う
- ロードバランサー(1台)とSSLクライアント認証&リバースプロキシ(2台)Webサーバー3台&Private CA 1台 は同一ネットワークへ配置
- ロードバランサーには、SSLサーバー証明書の登録は不要
- 設定は全てWeb GUIから行なう
使用する機器
- FUJITSU Hybrid IT Service FJcloud-O(IaaS)
- FUJITSU Hybrid IT Service FJcloud-O のロードバランサー ( LBaaS v2 )
- Powered BLUE プライベート CA 1台 ( 認証局 / FUJITSU Hybrid IT Service FJcloud-Oで運用 )
- Powered BLUE リバースプロキシ 2台( SSLクライアント認証 & Rev-Proxy / FUJITSU Hybrid IT Service FJcloud-Oで運用)
- Powered BLUE Web サーバー 3台( Web / FUJITSU Hybrid IT Service FJcloud-Oで運用)
- SSLサーバー証明書
■プライベートCAとしては、
を利用します。
公的な認証局 ( Public CA )も利用出来ます(例 グローバルサイン )
■SSLクライアント認証&リバースプロキシとしては
を利用します
■Web サーバーとしては
を利用します
ネットワーク構成
- LAN 10.0.5.0 / 24
- ルーター / gw IP=10.0.5.1
- ロードバランサー IP=10.0.5.2 / IP=133.162.67.28 / LM-master-web.mubit.com
- B870-CA IP=10.0.5.20 / IP=133.162.67.42 / B870-CA.mubit.com
- Rev1 / B870-REV1 IP=10.0.5.22 / IP=133.162.67.20 / B870-REV1.mubit.com
- Rev2 / B870-REV2 IP=10.0.5.27 / IP=133.162.67.25 / B870-REV2.mubit.com
- Web1 / B870-WEB1 IP=10.0.5.31 / IP=133.162.67.53 / B870-LBC1.mubit.com
- Web2 / B870-WEB2 IP=10.0.5.32 / IP=133.162.67.54 / B870-LBC2.mubit.com
- Web3 / B870-WEB3 IP=10.0.5.37 / IP=133.162.67.57 / B870-LBC3.mubit.com
- 運用するゾーン east-3 or west-3
設定&構築
今回はFUJITSU Hybrid IT Service FJcloud-OのGUIからの操作で構築します。尚OpenStack 標準のGUI / Horizonからの操作やAPI , Ansibleでの構築も可能です。
Networkの設定
OpenStack / FUJITSU Hybrid IT Service FJcloud-O のネットワークなどの基本設定を行ないます。
- 4OSS/OpenStack上にNetworkなどを初期設定します
Private CAの設定
Private CAとしては、Powered BLUE Private CAを利用します
4OSS/OpenStack上にPowered BLUE Private CA サーバーをセットアップします。
- B870-CA / B870-CA.mubit.com / IP=10.0.5.20 / IP=133.162.67.42
SSLクライアント証明書の発行
プライベートCAでSSLクライアント証明書を発行。クライアント証明書は、会社や部門全体での一括発行や、1ユーザーごとの個別の発行が出来ます
SSLクライアント証明書を個別発行の場合(マニュアルで1枚発行の場合)
例 suzuki@mubit.com ユーザーのクライアント証明書を作成
有効期限などを指定して発行します
有効期間やポリシーを設定して、部門や全社員の一括発行も出来ます
SSLクライアント証明書をダウンロードします
ダウンロードURLを通知して、ユーザーが個別にダウンロードすることも出来ます
SSLクライアント証明書のブラウザへのインストール(Firefoxの場合)
「証明書を表示」をクリック
あなたの証明書」のインポートをクリック
SSLクライアント証明のパスワード入れてインストールします
正常にインポート時の表示
証明書マネージャーにインストールしたクライアント証明書が表示されます
プライベートCA設定のポイント
CRLを配布できるSSLクライアント認証&リバースプロキシのIPを指定できます
例 SSLクライアント認証&リバースプロキシ
- B870-REV1 IP=10.0.5.22
- B870-REV2 IP=10.0.5.27
Private CA へのIPのアサイン
- B870-CA / B870-CA.mubit.com / IP=10.0.5.20 / IP=133.162.67.42
リバースプロキシの設定
Powered BLUE サーバーは1台で
- SSLクライアント認証&リバースプロキシサーバー
の機能を有しています。
2台のリバースプロキシサーバーに、
SSLサーバー証明書を入れます。またSSLクライアント認証の設定とリバースプロキシの設定を行ないます。
Powered BLUE サーバーは、ベースOSとして CentOS 7.x / RedHat 7.x (64bit) で動作します。CentOS / RedHat 対応のアプリケーションをインストール&運用することも出来ます。WordPress や Let’s Encrypt などは、フリープラグインにより簡単にPowered BLUE サーバーへインストール&利用が出来ます。
ポイント
- 2台のリバースプロキシサーバーに、同一のSSLサーバー証明書を入れます
- SSLサーバー証明書は、自己証明書やLet’s Encrypt、パブリックなサーバー証明書を登録出来ます
自己証明書の場合
同一のSSLのサーバー証明書を作成します(1台目のhttpsサーバー)
- 「自己署名デジタル証明書の作成」 または 「署名リクエストの作成」 で作成します
自己署名デジタル証明書の作成の場合
- 「自己署名デジタル証明書の作成」から必要事項を記入して、SSLを有効にします
パブリックなSSLサーバー証明書を利用の場合
- 署名リクエスト(CSR)で作成の場合
- 必要事項を記入して、「署名リクエストの作成」 ボタンを押します
- 作成された 「署名リクエスト」 ファイルを保存
- この「署名リクエスト」ファイル signig-request.txt を、公的なSSLサーバー証明書の発行機関へ送付
公的機関で発行された、SSLサーバー証明書を「インポート」します
サーバー証明書&秘密鍵のエクスポート(1台目のhttpsサーバー)
- 1台目のWebサーバーに登録されている、「サーバー証明書&秘密鍵」が含まれているssl-certificate.txtを「エクスポート」
サーバー証明書&秘密鍵のインポート(2台目以降のhttpsサーバー)
- 1台目のWebサーバーから取り出した「証明書&秘密鍵」が含まれている「ssl-certificate.txt」を2台目以降のWebサーバーへインポート
- 1台目のサーバー証明書と秘密鍵のコピーが2台目にインストールされます
Let’s Encryptの場合
Let’s Encryptは、無償で利用できる公的なSSLサーバー証明書です。Powered BLUE 870 へはフリープラグインを利用して、1台目のWebサーバーへSSLサーバー証明書をインストールします。
2台目のWebサーバーへのSSLサーバー証明書のインストールは、上記の「パブリックなSSLサーバー証明書を利用の場合」と同様の操作方法で、1台目から「SSLサーバー証明書と秘密鍵」をエクスポート&2台目へ「SSLサーバー証明書と秘密鍵」をインストールします。
SSLクライアント認証を設定
- 1台目、2台目ともWebアクセス時の 「SSLクライアント認証」 を有効にします
CAからCRL自動入手&更新の設定
- CAからCRL(失効リスト)を自動入手出来る設定をします
- 取得先CA ホスト名 ( 例 B870-CA.mubit.com )
- 同期結果 「成功」 の場合には、CAからCRLが正常に入手できています
- 2台のリバースプロキシサーバーとも同様の設定を行ないます
アクセスコントロール
有効なSSLクライアント証明書を有している場合でも、Webサイト毎に各種のアクセスコントロールが設定出来ます
失効リスト(CRL)に関わらず、ただちにWebへのアクセス禁止を設定できます
SSLクライアント証明書を失効させることなく、Webへのアクセスを禁止できます
・組織や部門でのアクセス制限
・曜日や時間帯でのアクセス制限
・特定ユーザーでのアクセス制限
・端末を紛失したので、ただちにAさんのSSLクライアント証明書でのアクセスを禁止
ログの出力先などの指定
SSLクライアント認証時のアクセスログの出力先を指定出来ます
リバースプロキシの設定
1台目、2台目ともリバースプロキシからWebへのリダイレクト先を設定します
設定例 (複数のリダイレクト先を指定できます )
- WEB1 ⇒ https://10.0.5.31/WEB1/
- WEB2 ⇒ https://10.0.5.32/WEB2/
- WEB3 ⇒ https://10.0.5.37/WEB3/
- activemail ⇒ https://10.0.5.31/activemail/
- proself ⇒ https://10.0.5.31/proself/
- owncloud ⇒ https://10.0.5.31/owncloud/
- cybozu ⇒ http://10.0.5.32/cybozu/
- dneo ⇒ http://10.0.5.32/dneo/
- mubit ⇒ http://www.mubit.com/dir/
Webサーバーの設定
それぞれのWebサーバーへホームページやWebアプリケーションを入れます
B870-Web1 ( https Web サーバーNo1 )
B870-Web2 ( https Web サーバーNo2 )
B870-Web3 ( https Web サーバーNo3 )
リバースプロキシサーバーへのグローバルIPのアサイン
1台目 リバースプロキシ へのIPのアサイン
- B870-REV1 / B870-REV1.mubit.com / IP=10.0.5.22 / IP=133.162.67.20
2台目 リバースプロキシ へのIPのアサイン
- B870-REV2 / B870-REV2.mubit.com / IP=10.0.5.27 / IP=133.162.67.25
ロードバランサー ( LBaas v2) の作成
- ロードバランサ名の設定 (例 LB-master-1 IP=10.0.5.2 )
- ロードバランサのプロトコル選択(例 プロトコル TCP / ポート443 )
- 分散するサーバーの設定
負荷分散設定
分散プロトコルの設定
- リスナー名 例 lb-https
- プロトコル HTTPS-HTTPS
- フロントエンドポート 443 (ロードバランサーの受信側ポート)
- 最大接続数 例 2000
負荷分散設定
- プール名 例 https-pool
- 分散アルゴリズム 例 ラウンドロビン
- セッション維持ポリシー 例 SOURCE_IP (httpsの場合には、この選択のみ可能)
- バックエンドプロトコル 例 HTTPS
- バックエンドポート 例 443
分散先のターゲットWebサーバーの指定
- 1台目 Webサーバー B870-REV1 / 仮想Webサイト名 B870-REV1 ( IP=10.0.5.22 )
- 2台目 Webサーバー B870-REV2 / 仮想Webサイト名 B870-REV2 ( IP=10.0.5.27 )
ヘルスモニタの設定
- チェック方式 例 HTTPS
ヘルスモニターのチェック方式には、 「TCP」または「HTTPS」を指定する必要があります。
ロードバランサーへグローバルIPアドレスの設定
- ロードバランサー IP=10.0.5.2 / IP=133.162.67.28 / LM-master-web.mubit.com
ロードバランサー NUAGE:VIP IP=10.0.5.2 へグローバル IP=133.162.67.28 をアサインします
グーローバルIPのアサイン状況
- ロードバランサー IP=10.0.5.2 / IP=133.162.67.28 / LM-master-web.mubit.com
- B870-CA IP=10.0.5.20 / IP=133.162.67.42 / B870-CA.mubit.com
- Rev1 / B870-REV1 IP=10.0.5.22 / IP=133.162.67.20 / B870-REV1.mubit.com
- Rev2 / B870-REV2 IP=10.0.5.27 / IP=133.162.67.25 / B870-REV2.mubit.com
- Web1 / B870-WEB1 IP=10.0.5.31 / IP=133.162.67.53 / B870-LBC1.mubit.com
- Web2 / B870-WEB2 IP=10.0.5.32 / IP=133.162.67.54 / B870-LBC2.mubit.com
- Web3 / B870-WEB3 IP=10.0.5.37 / IP=133.162.67.57 / B870-LBC3.mubit.com
ロードバランサーにグローバルIPをアサインしても、ロードバランサーの名称は空白のままです。
DNSへの登録
- IP=133.162.67.28 / LM-master-web.mubit.com (ロードバランサー名)
Webへのアクセスは、ロードバランサー名のAレコードで行います
Webサーバー側の設定
1台目 B870-REV1.mubit.com の設定
ロードバランサーにアサインのサーバーのAレコード名 LM-master-web.mubit.comでアクセス出来るように 1台目の B870-REV1.mubit.com に
- ウェブサーバーの別名 LM-master-web.mubit.com を指定
- URLのリライトを無効設定( URLが書き換わらないようにします )
2台目 B870-REV2.mubit.com の設定
ロードバランサーにアサインのサーバーのAレコード名 LM-master-web.mubit.comでアクセス出来るように 2台目の B870-LBC2.mubit.com に
- ウェブサーバーの別名 LM-master-web.mubit.com を指定
- URLのリライトを無効設定( URLが書き換わらないようにします )
Aレコードでのアクセス
https://LM-master-web.mubit.com/web1/
1台目 B870-LBC1 へ SSLクライアント認証が通るとWeb pageが表示されます(URLは書き換わっていません )
https://LM-master-web.mubit.com/web2/
2台目 B870-LBC2 へ SSLクライアント認証が通るとWeb pageが表示されます(URLは書き換わっていません )
https://LM-master-web.mubit.com/web3/
3台目 B870-LBC3 へ SSLクライアント認証が通るとWeb pageが表示されます(URLは書き換わっていません )
SSLクライアント認証例 (承認されない場合)
有効なSSLクライアント証明書が無いクライアントからのアクセスの場合 ( IPhone )
Google Chrome の場合
デモサーバー
Powered BLUEの デモサーバー