【OCI】Oracle Linux 8 で Let's encrypt の証明書を発行する

作業の流れ

全体の流れは、以下の通り

  1. Let's encrypt で SSL 証明書を発行する
  2. SSL 証明書の自動更新設定

Let's encrypt で SSL 証明書を発行する

適当な Compute インスタンスcertbot をインストールし証明書を発行する。

今回は OCI Compute (OS: Oracle Linux 8, Arm) を使う場合で説明する。

公式では snapd による certbot install が推奨となっているが、Oracle Linux 8 on Arm64 on OCI の環境では certbot が Segmentation fault になり機能しなかった。 (同様の例: Segmentation fault · Issue #9138 · certbot/certbot · GitHub

そのため、certbot は dnf で install する。

(参考) Certbot Instructions | Certbot

# EPEL repository の有効化
$ sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

# certbot と nginx 設定用のパッケージのインストール
$ sudo dnf install certbot python3-certbot-nginx -y

# --nginx を指定すると、証明書発行だけでなく、 nginx の conf への追記、nginx の reload まで実施する
$ sudo certbot --nginx 
... # 指示に従ってメールアドレスや、ドメインを入力する

SSL 証明書の自動更新設定

Let's encrypt で発行した証明書の有効期限は3ヶ月のため定期的に更新が必要。 証明書更新後は nginx の reload が必要なので --post-hook オプションで証明書更新後に実行するコマンドを設定する。

毎週月曜午前4時に証明書の更新を試みるコマンドを crontab に登録する例

$ sudo crontab -e
00 04 * * mon certbot renew --post-hook "systemctl reload nginx"

なお、通常 certbot renew は証明書の有効期限が残り30日を切っていないのであれば署名書更新は行わずスキップされる。 つまり、実際の証明書更新は2ヶ月に1度しか行われない。 あえて毎週更新を試みているのは、2ヶ月に一度のコマンド実行だと、運悪くそのタイニングでインスタンスがダウンしていたり、ネットワークに問題が起きていると証明書の有効期限が切れてしまうため。