#はじめに
検証でクイックに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
#全体の流れ
- Linuxで自己証明書を作成
- OCI LBでSSL終端させる設定(一般的なSSLアクセラレータ)
- 【Appendix】+ LB-WEBサーバ間もSSL通信させる設定(End to End SSL)
- 【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を入力)
⑥確認
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終端させる設定
###①OCI設定を開く
ロードバランサ詳細開いて「証明書の追加」
###③証明書の登録
以下をそれぞれ登録(テキスト形式なので、今回は開いてコピペ)
- www-self.crt・・・OCILBの「SSL証明書」として登録するもの
- private_key.pem・・・OCILBに「秘密キー」として登録するもの
※パスフレーズは秘密鍵のパスワードを入力する
※自己証明書なので「CA証明書」は無いため、無くてもOK。ただし、LB-WEB間もSSL通信させたい場合は必要なので、無駄にでもopensslでCAで認証局を建ててその際に出てくるCA認証局の証明書を登録する。(自己CA認証局で署名したサーバ証明書は、OCILBでは「SSL証明書」として利用はできない その際にはサーバ証明書をこちらにも登録する
###④リスナー設定を変更
(下記手順で変更できない部分がある場合は、リスナーのみ再作成する)
ポイントを記載
- プロトコル:HTTP
- ポート:443
- SSL使用にチェック
- 登録したサーバ証明書を指定
※バックエンドセット名はいまは気にしない
###以上、の手順で完成
「OCI LBロードバランサでTLS/SSLを終端する」の確認
※今回はwww.sample.work は PCのhostsに書いている。ここは実在するドメイン名で、自分で管理する権威DNSサーバでAレコード等を記載するのが良い。
[Appendix]LB-WEBサーバ間もSSL通信させる設定(End to End SSL)
バックエンドセットを編集し、「SSLの使用」にチェックを入れ、リスナーに登録したものと同じ証明書を選択する。
※ただし、証明書を登録する際に「CA証明書」も入ったものでないとエラーになる。よって、自己証明書ではEnd to End SSLは正しく設定できない。
[Appendix]LBはルーティングだけして、WEBサーバでSSL終端させる
-
バックエンドセットは プロトコル指定はないので、普通443宛に流す。
-
「セキュア」属性のチェックは外す。
以上