先日の日記で説明した --manual --preferred-challenges dns とフックスクリプトを使った Dynamc DNS による証明書取得だが、スクリプトを使わずとも --dns-rfc2136 を使えば Dynamic DNS による証明書の取得が出来るのでそれを使うことにする。
どうも CentOS では上手く行かなかったので「その1」を使用している。
こちら (その2) は FreeBSD 11.2-RELEASE p3 の
- py27-certbot-0.25.1,1
- py27-certbot-dns-rfc2136-0.25.1
を使用しているので、それらを pkg でインストールしておく。
--dns-rfc2136 のドキュメント
→
Welcome to certbot-dns-rfc2136’s documentation!
やること
- ACME Challenge 用 Dynamic DNS ゾーン (_acme-challenge.*) の作成
- Dynamic DNS 操作用鍵の作成
- certbot certonly --dns-rfc2136 の実行と renew
dnssec-keygen で Dynamic DNS 更新用の鍵を作成する。
アルゴリズムは HMAC-SHA512、キー名は "ac_gwnet" とした。
% dnssec-keygen -r /dev/urandom -a HMAC-SHA512 -b 256 -n HOST ac_gwnet
Kac_gwnet.+165+18145
% cat Kac_gwnet.+165+00000.key
ac_gwnet. IN KEY 512 3 165 Dummy+Key+Strings=
作った鍵は所有者以外みえないようにしておくように。
% chmod 600 K*
鍵ファイルは /etc/letsencrypt/ (FreeBSD の pkg で certbot をインストールしたら /usr/local/etc/letsencrypt/) の下にディレクトリを作り、その中に入れておくと良い。
ゾーンの作成。
% sudoedit named.conf
key "ac_gwnet" {
algorithm hmac-sha512;
secret "Dummy+Key+Strings="; ← 作った鍵の中に書いてあるハッシュ値
};
zone "_acme-challenge.griffonworks.net" {
type master;
file "/var/named/dynamic/_acme-challenge_griffonworks_net.zone";
allow-update { localhost; key ac_gwnet; };
check-names ignore;
allow-transfer { localhost; };
};
ACME Challenge 用ゾーン設定。Dynamic DNS なのでデフォルト TTL とネガティブキャッシュ TTL は短めに。
% /var/named/dynamic/_acme-challenge_griffonworks_net.zone
$ORIGIN _acme-challenge.griffonworks.net.
$TTL 60
@ IN SOA sakura.griffonworks.net. root.griffonworks.net. ( 20180920 3H 10M 1W 1M )
IN NS sakura.griffonworks.net.
権限委譲設定。権限委譲元のゾーンに権限委譲先のドメイン名を書く。
% /var/named/dynamic/griffonworks_net.zone
(省略)
_acme-challenge.griffonworks.net. IN NS sakura.griffonworks.net.
DNS の準備が出来たら確認。
できれば受信側の DNS サーバーで named.log を tail しておくと良い。
% nsupdate -k Kac_gwnet.+165+18145.key
>server x.x.x.x ← DNSサーバーのアドレスを指定。localhost なら localhost。
>update add test._acme-challenge.griffonworks.net. 10 IN TXT "TestRecord"
>send
% digna +noall +ans +ques TXT test._acme-challenge.griffonworks.net.
;test._acme-challenge.griffonworks.net. IN TXT
test._acme-challenge.griffonworks.net. 10 IN TXT "TestRecord" ←登録出来た
テストし終えたら削除しておく。
% nsupdate -k Kac_gwnet.+165+18145.key
>server x.x.x.x ← DNSサーバーのアドレスを指定。localhost なら localhost。
>update delete test._acme-challenge.griffonworks.net.
>send
% digna +noall +ans +ques TXT test._acme-challenge.griffonworks.net.
;test._acme-challenge.griffonworks.net. IN TXT
証明書取得のための certbot 用設定ファイルの作成。
今回は certbot から Dynamic DNS の更新リクエストを DNS サーバーに投げるので、それ用の設定ファイルが必要。
[ /etc/letsencrypt/renewal-hooks/griffonworks.net.ini ]
※ファイル名は適当。
dns_rfc2136_server = x.x.x.x
dns_rfc2136_port = 53
dns_rfc2136_name = ac_gwnet
dns_rfc2136_secret = Dummy+Key+Strings=
dns_rfc2136_algorithm = HMAC-SHA512
では証明書を取得してみる。
まずは --staging で!
% sudo certbot certonly -m griffon@griffonworks.net --staging \
-d griffonworks.net \
--manual-public-ip-logging-ok \
--dns-rfc2136 \
--dns-rfc2136-credentials /usr/local/etc/letsencrypt/renewal-hooks/griffonworks.net.ini \
--force-renewal \
--dns-rfc2136-propagation-seconds 10
オプションの一部を説明。
- 証明書証明リクエストの認証方式にダイナミックDNS更新を利用する (--dns-rfc2136)
- ダイナミックDNS更新利用時の設定ファイル (--dns-rfc2136-credentials)
- ACME サーバーが DNS を参照するまでの待ち時間 (--dns-rfc2136-propagation-seconds)。DNS更新が早いならば短くして良い。
% sudo certbot certonly (省略)
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator dns-rfc2136, Installer None
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for griffonworks.net
Waiting 10 seconds for DNS changes to propagate
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/usr/local/etc/letsencrypt/live/griffonworks.net/fullchain.pem
Your key file has been saved at:
/usr/local/etc/letsencrypt/live/griffonworks.net/privkey.pem
Your cert will expire on 2018-12-19. 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"
もし Dynamic DNS 更新に失敗したら "PluginError: Received response from server: REFUSED" と言われるので、鍵情報が間違ってないかなどを確認しよう。
参考:named.log (TXT レコードの登録時)
20-Sep-2018 13:25:26.982 update-security: client 219.75.232.51#62490: signer "certbot" approved
20-Sep-2018 13:25:26.982 update: client 219.75.232.51#62490: updating zone '_acme-challenge.griffonworks.net/IN': adding an RR at '_acme-challenge.griffonworks.net' TXT
20-Sep-2018 13:25:26.984 general: zone_settimer: zone _acme-challenge.griffonworks.net/IN: enter
20-Sep-2018 13:25:26.984 general: zone_settimer: zone _acme-challenge.griffonworks.net/IN: enter
20-Sep-2018 13:25:26.984 general: zone_timer: zone _acme-challenge.griffonworks.net/IN: enter
20-Sep-2018 13:25:26.984 general: zone_maintenance: zone _acme-challenge.griffonworks.net/IN: enter
20-Sep-2018 13:25:26.984 general: zone_settimer: zone _acme-challenge.griffonworks.net/IN: enter
参考:named.log (TXT レコードのクリーンナップ時)
20-Sep-2018 13:25:35.673 update-security: client 219.75.232.51#62492: signer "certbot" approved
20-Sep-2018 13:25:35.673 update: client 219.75.232.51#62492: updating zone '_acme-challenge.griffonworks.net/IN': deleting an RR at _acme-challenge.griffonworks.net TXT
20-Sep-2018 13:25:35.675 general: zone_settimer: zone _acme-challenge.griffonworks.net/IN: enter
20-Sep-2018 13:25:35.675 general: zone_settimer: zone _acme-challenge.griffonworks.net/IN: enter
20-Sep-2018 13:25:35.675 general: zone_timer: zone _acme-challenge.griffonworks.net/IN: enter
20-Sep-2018 13:25:35.675 general: zone_maintenance: zone _acme-challenge.griffonworks.net/IN: enter
20-Sep-2018 13:25:35.675 general: zone_settimer: zone _acme-challenge.griffonworks.net/IN: enter
成功したらあとは certbot renew --cert-name [CN名] で証明書の更新を行う。
ステージングサイトからのドメイン名削除と本番機で反映をお忘れずに。
└ G兄
└ G兄
└ G兄
└ G兄
└ G兄
└ G兄
└ G兄
└ G兄
└ 山銀
└ G兄