Open3

lego で SSL 証明書を管理する

nojimanojima

lego のインストール

シングルバイナリなので、Releases からダウンロードして /usr/local/bin などの適当な場所に配置すれば OK。

nojimanojima

証明書を取得

lego run で取得できる。証明書の取得には自分がドメインの所有者であることを証明しないといけない。それを行うための方法がいくつか用意されているが、ここでは http://ドメイン/.well-known/acme-challenge/ の下にファイルを置く方法を使う。

sudo lego --email="メールアドレス" --domains="ドメイン" \
    --http --http.webroot /path/to/the/webroot --accept-tos run

このコマンドが成功すると .lego の下に取得した証明書が配置される。

nojimanojima

定期的に証明書を renew する

let's encrypt から取得した証明書は有効期限が短いため、自動的に証明書を renew したい。また、renew したら nginx を reload したい。その手順を記す。

以下のスクリプトを /usr/local/bin/lego-renew という名前で作り、chmod +x する。

#!/bin/sh
set -eu

lego \
  --email="メールアドレス" \
  --domains="ドメイン" \
  --http \
  --http.webroot /path/to/the/webroot \
  --path /path/to/.lego \
  --accept-tos \
  renew \
  --days 30 \
  --renew-hook /usr/local/bin/reload-nginx

次に以下のスクリプトを /usr/local/bin/reload-nginx という名前で作り、chmod +x する。

#!/bin/sh
set -eu

systemctl reload nginx
echo "nginx has been reloaded" 2>&1

次に以下のファイルを /etc/systemd/system/lego-renew.service という名前で作成する。

[Unit]
Description=Renew SSL certificates with lego

[Service]
Type=oneshot
ExecStart=/usr/local/bin/lego-renew

最後に以下のファイルを /etc/systemd/system/lego-renew.timer という名前で作成する。

[Unit]
Description=Renew SSL certificates with lego

[Timer]
OnCalendar=10:23

[Install]
WantedBy=timers.target

あとは timer を有効化すれば OK。

sudo systemctl daemon-reload
sudo systemctl enable lego-renew.timer
sudo systemctl start lego-renew.timer
sudo systemctl status lego-renew.timer