【OCI】Oracle Linux 8 で Let's encrypt の証明書を発行する
作業の流れ
全体の流れは、以下の通り
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ヶ月に一度のコマンド実行だと、運悪くそのタイニングでインスタンスがダウンしていたり、ネットワークに問題が起きていると証明書の有効期限が切れてしまうため。