こんにちは、tomです。
SSL自動化が急務の中、今回は、さくらのクラウドが提供しているDNSサーバアプライアンスサービスを利用し、
サーバ上からDNS認証を使用したSSL自動化を紹介いたします。
certbotとは
certbotとは、サーバ上からSSL証明書を発行することが可能なツールであり、
発行からwebサービスへの更新まで自動化可能です。
SSL証明書の有効期限短縮に伴い、手動での更新作業が負担となる為、
ツールを利用した自動化対応が迫られています。
(参考)なぜSSL証明書の有効期間は短縮されるのか?
https://www.netassist.ne.jp/techblog/35904/
certbotでの証明書発行にあたっては、特定の認証を通過する必要があります。
公開されているサイトであれば、直接認証用ファイルを設置するwebroot認証で問題ないですが、
ワイルドカードや外部公開していないドメインであればDNSレコードを参照したDNS認証を使用する必要があります。
DNS認証は、ドメインを管理しているネームサーバに応じて方法が異なりますが、
さくらのクラウドのDNSであれば専用のプラグイン(dns-sakuracloud)を使用するだけで簡単に発行できます。
certbotおよびプラグインのインストール
大抵のOSであればepelリポジトリ内に登録されているので、ここからインストールします。
# dnf install certbot python3-certbot-dns-sakuracloud --enablerepo=epel
...
Installed:
certbot-3.1.0-1.el9.noarch fontawesome-fonts-1:4.7.0-13.el9.noarch
python-josepy-doc-1.14.0-1.el9.noarch python3-acme-3.1.0-1.el9.noarch
python3-beautifulsoup4-4.10.0-6.el9.noarch python3-certbot-3.1.0-1.el9.noarch
python3-certbot-dns-sakuracloud-3.1.0-1.el9.noarch python3-cffi-1.14.5-5.el9.x86_64
python3-chardet-4.0.0-5.el9.noarch python3-configargparse-1.7.1-1.el9.noarch
python3-configobj-5.0.6-25.el9.noarch python3-cryptography-36.0.1-5.el9_6.x86_64
python3-dns-2.6.1-3.el9.noarch python3-dns-lexicon-3.17.0-4.el9.noarch
python3-filelock-3.7.1-1.el9.noarch python3-idna-2.10-7.el9_4.1.noarch
python3-importlib-metadata-4.12.0-2.el9.noarch python3-josepy-1.14.0-1.el9.noarch
python3-lxml-4.6.5-3.el9.x86_64 python3-parsedatetime-2.6-5.el9.noarch
python3-ply-3.11-14.el9.noarch python3-pyOpenSSL-21.0.0-1.el9.noarch
python3-pycparser-2.20-6.el9.noarch python3-pyotp-2.9.0-1.el9.noarch
python3-pyrfc3339-1.1-11.el9.noarch python3-pysocks-1.7.1-12.el9.noarch
python3-pytz-2021.1-5.el9.noarch python3-pyyaml-5.4.1-6.el9.x86_64
python3-requests-2.25.1-10.el9_6.noarch python3-requests-file-1.5.1-4.el9.noarch
python3-soupsieve-2.4.1-1.el9.noarch python3-tldextract-3.4.4-1.el9.noarch
python3-urllib3-1.26.5-6.el9_7.1.noarch python3-zipp-3.20.1-2.el9.noarch
Complete!
さくらのクラウドのAPIキーの発行・登録
さくらのクラウドのコントロールパネルのメニュー欄から、「APIキー」を選択し、
「APIキーの作成」から作成可能です。
APIキー名は任意ですが、必要項目は下記をご参考に。

作成するとアクセストークンとアクセストークンシークレットが作成されるので、記録する。
重要な情報なので、取り扱いには気を付けてください。

APIキーの発行が完了すれば、先ほどのサーバ内でAPIキー情報を記載したファイルを設置します。
個人的にはあっちこっちに散らばらないようにcertbot作業ディレクトリ配下への設置が好みです。
# mkdir /etc/letsencrypt/.key/
# vi /etc/letsencrypt/.key/tnagai-wp.click_api_key
dns_sakuracloud_api_token = 'アクセストークン'
dns_sakuracloud_api_secret = 'アクセストークンシークレット'
重要な情報なので、パーミッションの調整もお忘れなく。
# chmod 600 /etc/letsencrypt/.key/tnagai-wp.click_api_key
SSL証明書発行
準備はなんとこれだけで、あとはサーバ上からSSL証明書の発行が可能です。
# certbot certonly --dns-sakuracloud --dns-sakuracloud-credentials /etc/letsencrypt/.key/tnagai-wp.click_api_key --agree-tos -d tnagai-wp.click -d *.tnagai-wp.click --register-unsafely-without-email
Account registered.
Requesting a certificate for tnagai-wp.click and *.tnagai-wp.click
Waiting 90 seconds for DNS changes to propagate
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/tnagai-wp.click/fullchain.pem
Key is saved at: /etc/letsencrypt/live/tnagai-wp.click/privkey.pem
This certificate expires on 2026-06-03.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
コマンドオプションの中でも特徴的なのを説明します。
--dns-sakuracloud
さくらのクラウドのDNSを使用したDNS認証を指定しています。
--dns-sakuracloud-credentials
さくらのAPIキー情報が必要な為、そのファイルパスを指定しています。
-d ドメイン
ワイルドカードを発行する場合、*.ドメインと入力する必要があります。
--register-unsafely-without-email
メールによるお知らせ通知を停止しています。
以前は有効期限通知を行っていましたが、昨年終了した為、特段設定する意味は少ないです。
証明書が無事発行されました。実際に取得したファイルは下記に保存されます。
# ll /etc/letsencrypt/live/tnagai-wp.click/
total 4
lrwxrwxrwx 1 root root 39 Mar 5 18:05 cert.pem -> ../../archive/tnagai-wp.click/cert1.pem
lrwxrwxrwx 1 root root 40 Mar 5 18:05 chain.pem -> ../../archive/tnagai-wp.click/chain1.pem
lrwxrwxrwx 1 root root 44 Mar 5 18:05 fullchain.pem -> ../../archive/tnagai-wp.click/fullchain1.pem
lrwxrwxrwx 1 root root 42 Mar 5 18:05 privkey.pem -> ../../archive/tnagai-wp.click/privkey1.pem
-rw-r--r-- 1 root root 692 Mar 5 18:05 README
証明書更新の自動化
これだけでは、1回証明書を発行しただけなので、実際にはcron等に更新コマンドを設定しますが、
その際は、プラグインのオプション等はいらないので、通常の更新コマンドで問題ないです。
# certbot renew
webサービスへの証明書反映を含めるともう少しかかりますが、さくらのクラウドのDNSであれば、
DNS認証も簡単にできますね。
今後もcertbotやSSL自動化に関連する情報を紹介できたらなと思います。それでは


