Let’s Encrypt DNSチャレンジ認証自動更新

逸般の誤家庭のメールサーバーのSSL/TLS認証に必要なフリーの証明書を発行するLet’s Encrypt のDNSチャレンジ認証をめも。

きっかけは certbot コマンドでお馴染みのstandalone オプションが通らない?だったらDNSチャレンジ認証すればいいじゃない(アントワネット並み感)だったと思います。やり方はいろいろネットに出ているので正解は一つではないですがエンカレッジを受けたものです。

チャレンジのタイプ – Let’s Encrypt – フリーな SSL/TLS 証明書

目次

http, https ポートの開放

まず、certbotのサーバー認証に必要なhttp, https ポートをfirewall-cmd で開放します。

# firewall-cmd --add-service=http --zone=public --permanent
# firewall-cmd --add-service=https --zone=public --permanent # firewall-cmd --reload

ヤマハルーターの場合の当拙記事:RTX830 IPoE PPPoEマルチセッション フィルタ型ルーティング設定 が必要でした。ルーターの80,443番のポートフォワーディングを行い、ポートチェック【外部からポート開放確認】 でメールサーバーの80,443 ポート開放を確認します。

certbotのインストール

次に、certbot本体をメールサーバーにインストールします。これは特に問題ないと思います。

# yum -y install epel-release

# yum -y install python2-certbot-apache

認証トークンをゲット

DNS02チャレンジするまえにDNSサーバーに設置する認証トークンをゲットします。

# certbot certonly --manual -d mail.stuffy.site --preferred-challenges dns
Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator manual, Installer None Starting new HTTPS connection (1): acme-staging-v02.api.letsencrypt.org Cert not due for renewal, but simulating renewal for dry run Simulating renewal of an existing certificate for mail.stuffy.site Performing the following challenges: dns-01 challenge for mail.stuffy.site - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please deploy a DNS TXT record under the name _acme-challenge.mail.stuffy.site with the following value: nN7iALVuBdZPGlXVzoG-dpKElP1MmTKWvX9nZkm6dbQ Before continuing, verify the record is deployed. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Press Enter to Continue

直ぐに[Enter]キーを押したくなるところですがここは落ち着いてまずは表示されたトークンをコピーします。

BINDにTXTレコードを追加

上記画面でエンターキーを押してもDNSサーバーのzoneファイルにトークンを登録していない場合は認証に失敗します。ここではいったん作業を中断してトークンをコピーしてTXT情報としてDNSサーバーに設置します。「ちょっと、シリアル値(意味深)上げないとマズいですよ。」

stuffy.site.zone

        IN      MX 10   mail.stuffy.site.
;
localhost IN    A       127.0.0.1
ns1     IN      A       116.58.163.5
mail    IN      A       116.58.163.6
www     IN      A       116.58.163.4
;
#コ↑コ↓ _acme-challenge.mail IN TXT nN7iALVuBdZPGlXVzoG-dpKElP1MmTKWvX9nZkm6dbQ

chrootディレクトリにzoneファイルをコピー、BIND再起動します。この辺は自己流でツッコミ処満載な操作なのであまり参考にしないで下さい。

[NS Server] # pwd
/var/named

# \cp stuffy.site.zone ./chroot/var/named

# rm -f ./chroot/var/named/*.jnl
# systemctl restart named-chroot
# rndc flush

certbot DNS02 チャレンジ認証

先ほどのメールサーバーの画面で[Enter]キーを押してCongratulations! と表示されれば認証成功です。

Cronで自動更新

メールサーバーのcrontab -e を編集して更新を自動実行するように設定します。以下は2か月に1回、隔月1日の午前4時と6時に証明書の更新をする例です。失敗した場合に備えて2回実行していますがやり過ぎるとレート制限が掛かるので注意が必要です。( –dry-runオプションを付けて動作確認すると良いでしょう。)

# crontab -e
00 04 1 */2 * echo 2 | /usr/bin/certbot certonly --manual -d mail.stuffy.site --preferred-challenges dns --post-hook 'systemctl reload postfix' --post-hook 'systemctl reload dovecot' 00 06 1 */2 * echo 2 | /usr/bin/certbot certonly --manual -d mail.stuffy.site --preferred-challenges dns --post-hook 'systemctl reload postfix' --post-hook 'systemctl reload dovecot'
# systemctl restart crond

cron がちゃんと動いているかログを確認、しよう!(直球)

# cat /var/log/cron | grep certbot

参考URL: チャレンジのタイプ – Let’s Encrypt – フリーな SSL/TLS 証明書

Let’s EncryptのSSL証明書をDNS認証で発行してみた。(DNSはお名前.com) – Qiita

同じカテゴリーの記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です