#はじめに
下記の続きです。
https://qiita.com/y_tama/items/9151b4c981abbb65c53d
CISのTLSオプションを使って、下記の通信の暗号化について制御し、ウェブサイトのセキュリティを向上させられます。
・エンドユーザーとCIS間の通信
・CISとオリジンサーバー間の通信
CISのTLSオプションには下記の4種類があります。下に行くほどセキュアになります。
TLSオプション | エンドユーザーとCIS間 | CISとオリジンサーバー間 | 備考 |
---|---|---|---|
Off | No | No | HTTP通信 |
Client-to-Edge | Yes | No | CISとオリジンの間は暗号化されない |
End-to-End flexible | Yes | Yes(自己署名証明書) | DNSのオリジンのレコードが適切であればセキュア |
End-to-End CA signed | Yes | Yes(CA署名証明書) | 最もセキュア |
参考:
https://console.bluemix.net/docs/infrastructure/cis/ssl-options.html#tls-options
https://support.cloudflare.com/hc/en-us/articles/200170416-What-do-the-SSL-options-mean-
本番業務で使う際は、最もセキュアな一番下の「End-to-End CA signed」が妥当と思いますが、下から2番目の「End-to-End flexible」は追加費用がかからずEnd-to-Endで暗号化できるため、開発・検証であれば悪くない選択肢に見えます。
このオプションの良いところは、エンドユーザーとCIS間の通信には、CISが提供する署名済みの証明書が使用されるため、ユーザー側のブラウザには自己署名証明書の警告メッセージが出ない点です。このオプションの場合、オリジンサーバーには自己署名照明を使うのでCISには警告メッセージが届いているはずですが、CISがこれを無視するので、ユーザーは裏で自己署名証明書が使われていることを意識しません。
今回は、この「End-to-End flexible」オプションを試してみます。
#End-to-End flexibleオプションの設定
CISのSecurityのページで、「End-to-End flexible」を選択します。CIS側で、自身のドメインに対する証明書が用意されます。この証明書が、エンドユーザーのブラウザとCIS間の通信で使われます。
#オリジン側に証明書を設定
オリジンサーバー側は、自己署名証明書を作成します。
探せば多くの情報が見つかるので詳細は省きますが、Linux上でopensslコマンドでサーバーの秘密鍵と自己署名証明書を作成しました。
今回は、オリジンサーバー側はIBM Cloud Load Balancer(と、その配下のウェブサーバー)なので、Cloud Load Balancerに、作成した自己署名証明書を配置し、そこで復号する構成とします。(Cloud Load Balancerとウェブサーバー間は、PrivateネットワークをHTTPで通信。)
管理ポータルのSecurity>SSL>Certificatesで、作成した自己署名証明書をインポートします。
自己署名証明書と、サーバー秘密鍵の情報をペーストし、Submitします。
Cloud Load Balancerで、HTTPSをプロトコルとして追加し、今、追加した自己署名証明書を選択します。
#アクセスして確認
ブラウザから、Cloud Load BalancerのFQDNにアクセスすると、想定通り、自己署名証明書についての警告メッセージが出ます。例外に追加すると、ウェブサーバーのコンテンツにアクセスできます。
次に、CIS経由にするために、自身のドメインを指定してアクセスすると、特に警告メッセージが出ることなくコンテンツにアクセスできます。
エンドユーザーのブラウザとCIS間は、COMODOの証明書が使われていました。
ということで、End-to-EndのTLS化が可能な「End-to-End flexible」オプションを試しました。
本番業務で使う際は、CA署名の証明書を使う「End-to-End CA signed」が妥当と思いますが、開発・検証であれば「End-to-End flexible」は追加費用もかかりませんので、選択肢に含めてもよいかもしれません。