ValueDomainでDNS管理しているドメインをさくらのクラウドのDNSを使ってLet’s Encrypt(certbot)のワイルドカード証明書を発行&自動更新 @Ubuntu+Nginx
主にDigitalOceanのエントリの内容にワイルドカード証明書を作るための作業を付加したもの。参考エントリをかいつまんでまとめた作業。
環境
Ubuntu 20.04
Nginx 1.18.0
下準備
- さくらのクラウドでDNSゾーンの作成
- バリュードメインにDNSレコード追加
- さくらのクラウドでAPIキー作成
さくらのクラウドでDNSゾーンの作成
- 1DNSゾーン 44円/月のコストパフォーマンス
- 他のレコードもそのうち引越す
DNSはバリュードメインで管理していたけど、この価格なら全て引っ越してもよいかも。とりあえずはacmeチャレンジのみ行う。
バリュードメインにDNSレコード追加
- _acme-challenge.example.orgのネームサーバをさくらのクラウドに向ける
- ネームサーバはさくらのクラウド > DNS > 設定したDNSゾーンの情報に記載してあるものを指定する
バリュードメインで追加するDNSエントリ。バリュードメインの記法だと下記。
ns _acme-challenge ns1.xxxx.sakura.ne.jp.
ns _acme-challenge ns2.xxxx.sakura.ne.jp.
さくらのクラウドでAPIキー作成
- 名前:適時(LetsEncryptCertBot用等)
- アクセルレベル:作成・削除
サーバ(リモート)で行う作業
- APIアクセス用にトークンをファイルに保存
- CertbotとさくらのクラウドDNS用のCertbotプラグインをインストール
- 証明書発行
- Nginxの設定ファイル更新
- 検証
APIアクセス用のトークンをファイルに保存
さくらのクラウドでAPIキー作成で作成したアクセストークンとアクセストークンシークレットをファイルに保存する。
vi ~/.sakura
dns_sakuracloud_api_token = アクセストークン
dns_sakuracloud_api_secret = アクセストークンシークレット
# パーミッションを変更しておく
chmod 600 ~/.sakura
certbotとプラグインをインストール
- Certbot
- さくらのクラウドDNS用のプラグイン
sudo apt install certbot python3-certbot-dns-sakuracloud
証明書の取得
--post-hook
でnginxのリロードコマンドを設定するエントリもあるが、--deploy-hook
だと更新が成功したときのみコマンドが走るのでこちらを使う。
後ほどの検証時、--post-hook
で設定している場合は--dry-run
でも再起動の確認ができる。
--deploy-hook
の場合はnginxのリロードはスキップされる
sudo certbot certonly --dns-sakuracloud \
--dns-sakuracloud-credentials ~/.sakura \
-d example.org \
-d *.example.org \
-m “your_mail_address@example.org” \
--agree-tos \
--deploy-hook "systemctl reload nginx"
# レスポンス
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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: y
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for example.org
dns-01 challenge for example.org
Waiting 90 seconds for DNS changes to propagate
# 90秒待つ
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.org/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.org/privkey.pem
Your cert will expire on 2022-11-02. 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"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- 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
Nginxがリロードしたかログを確認してみる
sudo journalctl -u nginx -n 1
# レスポンス
-- Logs begin at Mon 2022-07-25 21:52:18 JST, end at Thu 2022-08-04 16:08:10 JST. --
Aug 04 16:06:11 web02-ishikari systemd[1]: Reloaded A high performance web server and a reverse pro>
lines 1-2/2 (END)
この時点ではNginxに適用されていないので注意。
Nginxの設定ファイルに手動で追記する必要がある。
server {
….
ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem;
….
}
nginxをリロードすれば証明書が有効になる。
sudo systemctl reload nginx
余談
python3-certbot-dns-sakuracloud
と同時にpython3-certbot-nginx
を使えばnginxの設定ファイルも自動更新出来るかと思ったけど、certbotのプラグインは両方同時に使えないっぽいので断念した。
certbotの自動更新の検証
検証コマンド
証明書の更新を--dry-run
オプションをつけて(実際には更新しないで)実行。
sudo certbot renew --dry-run
# レスポンス
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/example.org.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator dns-sakuracloud, Installer None
Renewing an existing certificate
Performing the following challenges:
dns-01 challenge for example.org
dns-01 challenge for example.org
Waiting 90 seconds for DNS changes to propagate
Waiting for verification...
Cleaning up challenges
Dry run: skipping deploy hook command: systemctl reload nginx
certbotのタイマーを確認
sudo systemctl status certbot.timer
# レスポンス
● certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Thu 2022-08-04 11:45:06 JST; 4h 24min ago
Trigger: Fri 2022-08-05 03:51:37 JST; 11h left
Triggers: ● certbot.service
Aug 04 11:45:06 your_server_host_name systemd[1]: Started Run certbot twice daily.
ワイルドカード+マルチドメインの証明書発行
更にドメインを追加してワイルドカード+マルチドメインの証明書を作成するには-d ドメイン
を追加していく。
sudo certbot certonly --dns-sakuracloud \
--dns-sakuracloud-credentials ~/.sakura \
-d example.org \
-d *.example.org \
-d foo.com \
-d *.bar.com \
...
発行可能(実践済み)
ただしチャレンジが全てdns-01になるため証明書に登録するドメインすべてDNSの設定が必要になる。
参考エントリ
Ubuntu 20.04でLet’s Encryptを使用してNginxを保護する方法 | DigitalOcean
Let's EncryptでワイルドカードなSSLサーバー証明書が安価なVPSとDNSでマルチドメインWEBサーバーな話
Let’s EncryptによるSSLサーバー証明書の取得、自動更新設定(Snapを使用しない版) | 稲葉サーバーデザイン
[Let’s Encrypt]さくらのクラウドDNS経由でワイルドカード証明書を後付けのcertbotで取得する方法 – 株式会社シーポイントラボ | 浜松のシステム・RTK-GNSS開発
- さくらのクラウドの部分だけ参考にさせてもらう。
- certbot-autoは古いので現在は非推奨
Ubuntu 20.04上でCertbot + さくらのクラウドDNSを使用してワイルドカード証明書を取得する方法 – 株式会社シーポイントラボ | 浜松のシステム・RTK-GNSS開発