OpenStackのロードバランサ配下でリバースプロキシのSSLクライアント認証をする / FUJITSU Hybrid IT Service FJcloud-Oで構築運用

富士通が運用する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は分離構成)

https://www.mubit.co.jp/pb-blog/wp-content/uploads/2015/12/LB-63-ssl-1024x431.png

構築方針

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から行なう

 

使用する機器

https://www.mubit.co.jp/pb-blog/wp-content/uploads/2018/09/openstack-1.jpg

 

https://www.mubit.co.jp/sub/products/blue/img2/pb-vm-2.png

■プライベート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 のネットワークなどの基本設定を行ないます。

 

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

https://www.mubit.co.jp/pb-blog/wp-content/uploads/2021/06/fujitsu-11.png

 

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

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

https://www.mubit.co.jp/pb-blog/wp-content/uploads/2018/12/k5-ca-5.png

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

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

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

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

https://www.mubit.co.jp/pb-blog/wp-content/uploads/2018/12/k5-ca-7.png

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

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

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

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

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

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

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

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

https://www.mubit.co.jp/pb-blog/wp-content/uploads/2018/12/k5-ca-9.png

プライベート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

https://www.mubit.co.jp/pb-blog/wp-content/uploads/2018/12/k5-ca-2.png

 

リバースプロキシの設定

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サーバー証明書をインストールします。

 Let’s Encryptのインストール&セットアップ方法

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 )
  • 分散するサーバーの設定

https://www.mubit.co.jp/pb-blog/wp-content/uploads/2018/11/k5-lb-12-1.png

負荷分散設定

https://www.mubit.co.jp/pb-blog/wp-content/uploads/2018/11/k5-lb-13.png

分散プロトコルの設定

  • リスナー名 例 lb-https
  • プロトコル HTTPS-HTTPS
  • フロントエンドポート 443 (ロードバランサーの受信側ポート)
  • 最大接続数 例 2000

https://www.mubit.co.jp/pb-blog/wp-content/uploads/2018/11/k5-lb-14-1.png

負荷分散設定

  • プール名 例 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」を指定する必要があります。

https://www.mubit.co.jp/pb-blog/wp-content/uploads/2018/11/k5-lb-17.png

ロードバランサーへグローバル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 の場合

https://www.mubit.co.jp/pb-blog/wp-content/uploads/2018/12/k5-ca-10.png

 

デモサーバー

Powered BLUEの  デモサーバー