4OSS/OpenStackのロードバランサ配下でWebのSSLクライアント認証をする/はじめの一歩

富士通が運用するOpenStackのクラウド基盤「Fujitsu Cloud Service for OSS」略称 4OSS (旧名称 K5)で、ロードバランサ配下のWebサーバーを冗長構成で運用&SSLクライアント認証を行う場合の例です。一般的なOpenStackでも、同様の構成で運用が出来ます。

OpenStackのロードバランサー / LBaaS v2 ではSSLのサービスを通過させるだけでSSLクライアント認証はWebサーバー側で行います。ロードバランサーにはSSLサーバー証明書を登録する必要はありません。WebサイトまでSSL通信を行うので、途中経路での情報漏洩を防止する事が可能です。SSLクライアント認証時のアクセスログも取得します。

Client — ( 443 ) — ロードバランサ — ( 443 ) — Web Server (SSLクライアント認証)

この設定で運用するゾーンは 4OSSのjp-east-3 / jp-west-3 に対応しています( OpenStack / Ocata )。それ以外のゾーンは、OpenStackやロードバランサーのバージョンが異なるためネットワークやルーター、ロードバランサーの設定方法が異なります。

 

構築方針

  • OpenStackのロードバランサー(LBaaS v2)でSSLをターミネートしない
  • ロードバランサーを利用して負荷分散&冗長構成の運用を行う
  • ロードバランサーではTCP 443からTCP 443への転送
  • ロードバランサーにはSSLサーバー証明書の登録は不要
  • クライアントからWebサーバーまでの全経路で常時SSL通信(https)を行う
  • Private CA (認証局)は、OpenStack上で運用する
  • SSLクライアント端末認証は、Webサーバー側で行う
  • 失効リスト(CRL)の自動取得&同期を行なう
  • ロードバランサーとWebサーバー2台&Private CA は同一ネットワークへ配置
  • 設定はGUIから行なう

公的な認証局 ( Public CA )が発行したSSLクライアント証明書を利用してのSSLクライアント認証を行なう運用も出来ます(例 グローバルサイン / UPKI )

 

使用するもの

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

 

ネットワーク構成(最終形)

  • 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
  • Web1 / B870-LBM1 IP=10.0.5.22  / IP=133.162.67.25 /  B870-LBC1.mubit.com
  • Web2 / B870-LBM2 IP=10.0.5.27  / IP=133.162.67.30 /  B870-LBC2.mubit.com
  • 運用するゾーン    east-3 or west-3

 

設定&構築

今回は4OSSのGUIからの操作で構築します。尚OpenStack 標準のGUI / Horizonからの操作やAPI ,  Ansibleでの構築も可能です。

 

Networkの設定

OpenStack / 4OSSのネットワークなどの基本設定を行ないます。

 

Webサーバーの設定

https://www.mubit.co.jp/sub/products/cloud/img2/poweredBlue-logo-3.png

Webサーバーとしては、Powered BLUE Web サーバーを利用します

4OSS/OpenStack上に2台のPowered BLUE Web サーバーをセットアップします。

  • B870-LBM1 / B870-LBC1.mubit.com / IP=10.0.5.22   /  IP=133.162.67.25
  • B870-LBM2 / B870-LBC2.mubit.com / IP=10.0.5.27   /  IP=133.162.67.30

 

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

 

サーバーへのグローバルIPのアサイン

1台目 Web Server へのIPのアサイン

  • B870-LBM1 / B870-LBC1.mubit.com / IP=10.0.5.22   /  IP=133.162.67.25

2台目 Web Server へのIPのアサイン

  • B870-LBM2 / B870-LBC2.mubit.com / IP=10.0.5.27 / IP=133.162.67.30

Private CA へのIPのアサイン

  • B870-CA  /  B870-CA.mubit.com  /  IP=10.0.5.20  / IP=133.162.67.42

 

Webサーバーの設定

それぞれのWebサーバーへホームページのデータを入れます。Powered BLUE サーバーは、ベースOSとして CentOS 7.x / RedHat 7.x (64bit) で動作します。CentOS / RedHat 対応のアプリケーションをインストール&運用することも出来ます。WordPress や Let’s Encrypt などは、フリープラグインにより簡単にPowered BLUE サーバーへインストール&利用が出来ます。

B870-LBC1 (  Web サーバーNo1 )

B870-LBC2( Web サーバーNo2 )

ポイント

  • 2台のWebサーバーに、同一の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台目にインストールされます

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

 

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台のWebサーバーとも同様の設定を行ないます

アクセスコントロール

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

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

ログの出力先などの指定

SSLクライアント認証時のアクセスログの出力先を指定出来ます

 

Private CAの構築

4OSS上にPowered BLUE プライベートCAをセットアップします

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

 

ロードバランサー ( 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-LBM1 / 仮想Webサイト名 B870-LBC1 ( IP=10.0.5.22 )
  • 2台目 Webサーバー B870-LBM2 / 仮想Webサイト名 B870-LBC2 ( IP=10.0.5.27 )

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

ヘルスモニタの設定

  • チェック方式 例 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-LBM1 /   IP=10.0.5.22   / IP=133.162.67.25 /   B870-LBC1.mubit.com
  • B870-LBM2 /   IP=10.0.5.27   / IP=133.162.67.30 /   B870-LBC2.mubit.com
  • B870-CA      /   IP=10.0.5.20   / IP=133.162.67.30 /   B870-CA.mubit.com

ロードバランサーにグローバルIPをアサインしても、ロードバランサーの名称は空白のままです。

DNSへの登録

  • IP=133.162.67.28 /  LM-master-web.mubit.com (ロードバランサー名)

Webへのアクセスは、ロードバランサー名のAレコードで行います

 

Webサーバー側の設定

1台目 B870-LBC1.mubit.com の設定

ロードバランサーにアサインのサーバーのAレコード名 LM-master-web.mubit.comでアクセス出来るように 1台目の B870-LBC1.mubit.com に

  • ウェブサーバーの別名 LM-master-web.mubit.com を指定
  •  URLのリライトを無効設定( URLが書き換わらないようにします )

2台目  B870-LBC2.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/

1台目 B870-LBC1 へ  SSLクライアント認証が通るとWeb pageが表示されます(URLは書き換わっていません )

https://LM-master-web.mubit.com/

2台目 B870-LBC2 へ  SSLクライアント認証が通るとWeb pageが表示されます(URLは書き換わっていません )

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

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

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

Google Chrome の場合

 

 

https://www.mubit.co.jp/pb-blog/wp-content/uploads/2018/10/robot_cmyk_b_t_shirt.jpg

4OSS  GUIからの操作

https://www.mubit.co.jp/sub/products/ca/img2/arrow-finger.gif 超簡単 Fujitsu Cloud Service for OSS (4OSS)を初期設定する

4OSS  Ansibleからの操作

https://www.mubit.co.jp/sub/products/ca/img2/arrow-finger.gif Ansibleで4OSSのNetWork構築やサーバー設定を行なう場合

4OSS  リモートコンソールの利用設定

https://www.mubit.co.jp/sub/products/ca/img2/arrow-finger.gif 4OSS上のサーバーへパスワードログインをする

4OSS  web/https(443)を負荷分散の設定

https://www.mubit.co.jp/sub/products/ca/img2/arrow-finger.gif 4OSSでWebをロードバランスする