LoginSignup
11
3

More than 1 year has passed since last update.

OCI LBロードバランサでTLS/SSLを終端する

Last updated at Posted at 2020-01-28

はじめに

検証でクイックにOracle Cloud Infrastructure(OCI) LB(ロードバランサ)でSSLを終端する手順。
(検証とはいえ、HTTP(80)で外部公開とか作りたくない人向け)

※本来はTLSであるが、マニュアル表記やGUI上の表記は「SSL」であるため、以後は「SSL」と記載している

参考ブログ:https://www.ateam-oracle.com/load-balancing-ssl-traffic-in-oci
マニュアル:https://docs.cloud.oracle.com/en-us/iaas/Content/Balance/Tasks/managingcertificates.htm

全体の流れ

  1. Linuxで自己証明書を作成
  2. OCI LBでSSL終端させる設定(一般的なSSLアクセラレータ)
  3. 【Appendix】+ LB-WEBサーバ間もSSL通信させる設定(End to End SSL)
  4. 【Appendix】LBはルーティングだけして、WEBサーバでSSL終端させる

前提

  • OCIのネットワーク周り、VCNやサブネットは構成済み
  • 自己証明書発行用LinuxはOracle Linux 7.7 デプロイ直後の初期イメージでに1台
  • LBはAlways Free(無償!)で構築済み
  • バックエンドのWebサーバは、OCIマーケットプレイスで展開しているJenkins(ライセンスは無償)を利用でデプロイ済み

予備知識

  • OCI LBは自己証明書は対応している
  • OCI LBはLet's Encryptの証明書にも対応している
  • OCI LBはセルフCAを建てて、CA認証局で署名したサーバ証明書(SSL証明書)は登録できなかった。追加確認。。

1.Linuxで自己証明書を作成

①OSにSSHでログイン

「opc」ユーザ

②rootに切り替え

$ sudo -i

③秘密鍵生成

AES256bitの共通鍵を使って、RSA2048bitの秘密鍵を生成

# openssl genrsa -out private_key.pem -aes256 2048
Generating RSA private key, 2048 bit long modulus
................................................................................+++
....................................+++
e is 65537 (0x10001)
Enter pass phrase for private_key.pem: (パスワード付与する)
Verifying - Enter pass phrase for private_key.pem: (パスワード付与する)

# ll
total 4
-rw-r--r--. 1 root root 1766 Jan 28 14:30 private_key.pem

④CSR作成

先ほど生成した秘密鍵を使ってCSRを作成
※「Common Name」以外は適当。「Common Name」は実際にサーバにアクセスする際の名前もしくはIPアドレスにするのが良い。名前の場合、自分で所有している実在するドメイン名だと

# openssl req -new -key private_key.pem -out www.csr
Enter pass phrase for private_key.pem:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Osaka
Locality Name (eg, city) [Default City]:Osaka
Organization Name (eg, company) [Default Company Ltd]:Company
Organizational Unit Name (eg, section) []:Infra
Common Name (eg, your name or your server's hostname) []:www.sample.work       
Email Address []:user@sample.work

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: (そのままEnter)
An optional company name []: (そのままEnter)

# ll
total 8
-rw-r--r--. 1 root root 1766 Jan 28 14:30 private_key.pem
-rw-r--r--. 1 root root 1054 Jan 28 14:40 www.csr

⑤自己証明書の生成

ここで出てくる「www-self.crt 」がサーバ証明書(SSL証明書)である

# openssl x509 -in www.csr -out www-self.crt -req -signkey private_key.pem -days 3650
Signature ok
subject=/C=JP/ST=Osaka/L=Osaka/O=Company/OU=Infra/CN=www.sample.work/emailAddress=user@sample.work
Getting Private key
Enter pass phrase for private_key.pem: (秘密鍵のパスワードを問われるので、①のときに指定したPWを入力)

Image.png

⑥確認
www-self.crt・・・OCILBの「SSL証明書」として登録するもの
private_key.pem・・・OCILBに「秘密キー」として登録するもの

# ll
total 12
-rw-r--r--. 1 root root 1766 Jan 28 14:30 private_key.pem
-rw-r--r--. 1 root root 1054 Jan 28 14:40 www.csr
-rw-r--r--. 1 root root 1298 Jan 28 14:47 www-self.crt

2.OCI LBでSSL終端させる設定

事前にLBも作成済(無料!)
Image.png

①OCI設定を開く

ロードバランサ詳細開いて「証明書の追加」
Image [2].png

③証明書の登録

以下をそれぞれ登録(テキスト形式なので、今回は開いてコピペ)

  • www-self.crt・・・OCILBの「SSL証明書」として登録するもの
  • private_key.pem・・・OCILBに「秘密キー」として登録するもの

※パスフレーズは秘密鍵のパスワードを入力する
※自己証明書なので「CA証明書」は無いため、無くてもOK。ただし、LB-WEB間もSSL通信させたい場合は必要なので、無駄にでもopensslでCAで認証局を建ててその際に出てくるCA認証局の証明書を登録する。(自己CA認証局で署名したサーバ証明書は、OCILBでは「SSL証明書」として利用はできない その際にはサーバ証明書をこちらにも登録する
Image [3].png

登録された
image.png

④リスナー設定を変更

(下記手順で変更できない部分がある場合は、リスナーのみ再作成する)
ポイントを記載

  • プロトコル:HTTP
  • ポート:443
  • SSL使用にチェック
  • 登録したサーバ証明書を指定

Image [4].png

※バックエンドセット名はいまは気にしない

以上、の手順で完成

「OCI LBロードバランサでTLS/SSLを終端する」の確認

※今回はwww.sample.work は PCのhostsに書いている。ここは実在するドメイン名で、自分で管理する権威DNSサーバでAレコード等を記載するのが良い。
image.png

[Appendix]LB-WEBサーバ間もSSL通信させる設定(End to End SSL)

バックエンドセットを編集し、「SSLの使用」にチェックを入れ、リスナーに登録したものと同じ証明書を選択する。
※ただし、証明書を登録する際に「CA証明書」も入ったものでないとエラーになる。よって、自己証明書ではEnd to End SSLは正しく設定できない。
image.png

[Appendix]LBはルーティングだけして、WEBサーバでSSL終端させる

  • リスナーはHTTPではなく、あえてTCPの443で待ち受ける。
    そして、「SSLの使用」のチェックは外す。
    Image [5].png

  • バックエンドセットは プロトコル指定はないので、普通443宛に流す。

  • 「SSLの使用」にチェックは入れない。
    Image [7].png

  • 「セキュア」属性のチェックは外す。

Image [6].png

以上

11
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
3