Open3
lego で SSL 証明書を管理する
証明書を取得
lego run
で取得できる。証明書の取得には自分がドメインの所有者であることを証明しないといけない。それを行うための方法がいくつか用意されているが、ここでは http://ドメイン/.well-known/acme-challenge/
の下にファイルを置く方法を使う。
sudo lego --email="メールアドレス" --domains="ドメイン" \
--http --http.webroot /path/to/the/webroot --accept-tos run
このコマンドが成功すると .lego
の下に取得した証明書が配置される。
定期的に証明書を 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