Let's Encryptのワイルドカード証明書の取得と自動更新について(MyDNS)(2018/08現在)


Let's Encryptのワイルドーカード証明書ってナイスですよね。
5月にとったワイルドカード証明書の更新がミスっていたので設定し直しました。
情報が色々あって混乱したのでまとめます。

ワイルドカードの更新にはDNSのTXTレコード編集が必要です。
私はMyDNS使っているのでサービス謹製のツールを使います。
他のDNS使っている人はそれぞれスクリプト作るとか、作ってあるのを探すとかすれば良いと思います。

MyDNSのツール:
https://github.com/disco-v8/DirectEdit/

なにはともあれcertbotのインストール

なんかgithubからcloneしてある人もいると思いますがまぁ、パッケージ管理のモノを使うのが楽だと思います。

# Ubuntu
sudo apt install certbot
# AmazonLinux2
sudo yum install certbot

既存の証明書を消す

既存であるやつはめんどくさいので消しましょうか。

sudo su
cd /etc/letsencrypt
rm -frv ./*

MyDNSのツールを適当な所に落とす

私は/var/www/letsencryptgit cloneしました。

sudo su
mkdir -p /var/www/letsencrypt
cd /var/www/letsencrypt
git clone https://github.com/disco-v8/DirectEdit.git

証明書を取得する

普通の証明書とワイルドカード証明書を一気にとります。
ドメインとメールアドレスだけ変えてコマンド流してください。
lovesaemi.daemon.asia*.lovesaemi.daemon.asiaあなたのメールアドレスのところね。

sudo su
certbot certonly --manual \
--preferred-challenges=dns \
--manual-auth-hook /var/www/letsencrypt/DirectEdit/txtregist.php \
--manual-cleanup-hook /var/www/letsencrypt/DirectEdit/txtdelete.php \
-d lovesaemi.daemon.asia -d *.lovesaemi.daemon.asia \
--server https://acme-v02.api.letsencrypt.org/directory \
--agree-tos -m あなたのメールアドレス \
--manual-public-ip-logging-ok

取れました。

WEBサーバー設定して確認

ここはApacheとかNginxとかH2Oとかで作業変わると思うので割愛します。
普通の証明書もワイルドカードの証明書も一つになるので楽になりましたね。

自動更新の確認

確認はしとかないといけませんね
下記コマンド流してエラーが出ないことを確認します

# Apacheの場合
certbot renew --force-renew --dry-run --webroot-path /var/www/html/ --post-hook "systemctl reload httpd"
# H2Oの場合
certbot renew --force-renew --dry-run --webroot-path /var/www/html/ --post-hook "systemctl reload h2o"

うまくいけばエラーも表示されず問題ないことが確認できると思います。

cron設定

実はまだ実際に更新するところは確認できてないんですけど。。
まぁ、こんな感じかな、と思います。

cronは以下みたいになります。
Ubuntuの場合です。AmazonLinuxとかだとcertbotとかのパスが違うと思うのでwhichしましょ。
実際はWEBサーバーのreloadとかrestartとかしなくてもいけるっぽいことを書いているサイトがありましたが、どうなんでしょう?この辺はおいおい確かめていけば良いですかね。

# Ubuntu
  0   0  */5 *   *     /usr/bin/certbot renew --webroot-path /var/www/html/ --post-hook "/bin/systemctl reload h2o" >> /var/www/letsencrypt/update.log 2>&1
# とか
# AmazonLinux2
  0   0 */10 * *       /bin/certbot renew renew--webroot-path /var/www/html/ --post-hook "/bin/systemctl reload httpd" /dev/null 2>&1

その他

ロードバランサー配下のWEBサーバーに個別に証明書とるときの特有のコマンドあるらしいですが割愛します。ロードバランサーに証明書つければ良いのではないかな、個人的には思いますが。

以上です

実際はまだ更新できていないのでわからんのですけど、多分うまいこと行くと思います。

追記(2019/01/29)

自動更新OKでございます。ノーメンテで運用中。