[Oracle Cloud] Let's Encrypt で ロードバランサーを HTTPS 化してみた

# はじめに

Oracle Cloud 上の Nginx (Webサーバー) と 全段の Load Balancer に対して Let's Encrypt を使って SSL 対応する手順を紹介します。たまに聞かれる手順になっていて、毎回曖昧な記憶で試行錯誤しているので、備忘録として残しておきます。



# 環境情報

- Oracle Linux 7 (CentOS7, RHEL でも問題なし)
- Nginx
- Oracle Cloud の Load Balancer



# Nginx Install

Oracle Linux 7 に Nginx をインストールしていきます。簡単のために、firewalld を停止

```
sudo systemctl disable firewalld --now
```



Nginx Install

```
sudo yum install nginx -y
```



Nginx 起動

```
sudo systemctl enable nginx --now
```



# Certbot Install

Let's Encrypt から SSL 証明書を発行するクライアントツール (Certbot) をインストール

```
sudo yum install certbot -y 
```



# Let's Encrypt から SSL証明書を発行

Certbot コマンドを使って、SSL証明書を発行

```
sudo certbot certonly \
  --manual \
  --domain web01.sugioci.tokyo \
  --email your.address@gmail.com \
  --agree-tos \
  --manual-public-ip-logging-ok \
  --preferred-challenges dns
```



キャンペーンメールなどは不要なので、No

```
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N
```



ここで一時停止します。表示された TXT レコードを、DV として証明するためにドメインに設定していきます。

次の2つの文字列をメモっておきます

1. `_acme-challenge.web01.sugioci.tokyo`
2. `ASHQZlazqzY0OpRjA3tJsP9oXfM31_M2IUJjKiVMWLA`

```
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for web01.sugioci.tokyo

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.web01.sugioci.tokyo with the following value:

ASHQZlazqzY0OpRjA3tJsP9oXfM31_M2IUJjKiVMWLA

Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
```



この記事の手順では、`sugioci.tokyo` のドメインを OCI DNS で管理しているため、OCI Console の画面で紹介します。

Add Record

![1606548146424.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/13103f66-35d5-7be8-ba98-c574891b137f.png)



Certbot で表示された次の情報を入力していきます。指定されたレコードを入力することで、対象のドメインを管理していることを証明できます。

1. `_acme-challenge.web01.sugioci.tokyo`
2. `ASHQZlazqzY0OpRjA3tJsP9oXfM31_M2IUJjKiVMWLA`

![1606548561519.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/94608206-f3d7-cffd-102b-ff9032b0543a.png)



Publish

![1606548595673.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/257da91d-0377-ce84-beea-f00d3d023c18.png)



Publish

![1606548611037.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/292e8477-df61-693e-27a8-c14e4758e9ee.png)



dig で問題なく TXT レコードが引けるか確認。

```
> dig +dnssec @8.8.4.4 _acme-challenge.web01.sugioci.tokyo TXT

; <<>> DiG 9.11.3-1ubuntu1.13-Ubuntu <<>> +dnssec @8.8.4.4 _acme-challenge.web01.sugioci.tokyo TXT
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58053
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 512
;; QUESTION SECTION:
;_acme-challenge.web01.sugioci.tokyo. IN        TXT

;; ANSWER SECTION:
_acme-challenge.web01.sugioci.tokyo. 29 IN TXT  "ASHQZlazqzY0OpRjA3tJsP9oXfM31_M2IUJjKiVMWLA"

;; Query time: 55 msec
;; SERVER: 8.8.4.4#53(8.8.4.4)
;; WHEN: Sat Nov 28 07:30:32 UTC 2020
;; MSG SIZE  rcvd: 120

```



問題なく TXT レコードを引けたあとに、Certbot のコンソールで一時停止しているところから、Enter を押す

```
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.web.sugioci.tokyo with the following value:

n67uK8wG75cA_WnQZ4PMaGjpQ8voZF1Aqye6Er-4IoE

Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
```



正常に証明されている結果です

```
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/web01.sugioci.tokyo/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/web01.sugioci.tokyo/privkey.pem
   Your cert will expire on 2021-02-26. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

[opc@web01 ~]$
```



サーバ証明書などが生成されています

```
[root@web01 ~]# ls -la /etc/letsencrypt/archive/web01.sugioci.tokyo/
total 16
drwxr-xr-x. 2 root root   83 Nov 28 07:30 .
drwx------. 3 root root   33 Nov 28 07:30 ..
-rw-r--r--. 1 root root 1923 Nov 28 07:30 cert1.pem      # SSL/TLS サーバ証明書
-rw-r--r--. 1 root root 1647 Nov 28 07:30 chain1.pem     # 中間証明書
-rw-r--r--. 1 root root 3570 Nov 28 07:30 fullchain1.pem # サーバ証明書と中間証明書が結合されたもの
-rw-------. 1 root root 1704 Nov 28 07:30 privkey1.pem   # 秘密鍵
```



# Load Balancer に SSL/TSL 証明書をアップロード

OCI Load Balancer に証明書をアップロード

![1606550886539.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/ff3426b9-0563-d259-7f22-352cf6350ee0.png)



次の2つのファイルの中身をコピペで貼り付けます

- cert1.pem

- privkey1.pem

![1606551718995.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/8a64b068-0c3c-596c-397d-1c3910dad94a.png)



# Load Balancer の Listener に HTTPS(443) を追加

create

![1606551133076.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/6f31a2a6-1417-42a1-fa35-4e1206cad891.png)



create

![1606551322541.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/a31a709c-4cb6-93af-f111-1217f41bd804.png)



1,2分後、反映される

![1606551854114.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/3ef1ba44-6431-cbd1-1ccb-82d795fd6ba6.png)



# DNS にLBを紐づけ

DNS のレコードを追加して、Load Balancer に A レコードを紐づけます

![1606551077257.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/c936cc66-979f-97de-3a44-94f43e519ac2.png)



# 確認

それではアクセス確認をしてみましょう。正常に HTTPS になっています

![1606551935399.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/829f14d8-7a93-ac6c-9ba5-94a3544fc88d.png)



証明

![1606551993982.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/1509374d-0c8a-16e1-388a-1653f7232f4f.png)

DST Root CA X3 をルート認証局として、証明されている

![1606552186454.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/265347cd-a53a-68d9-02bf-b18e71adc241.png)



# 参考URL

https://qiita.com/sugimount/items/3f43c55141252f8f2968