2018/09/20
Let's Encryptでワイルドカード証明書を発行する その2
先日の日記で説明した --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
# ACME Challenge 用 Dynamic DNS 操作鍵
key "ac_gwnet" {
  algorithm  hmac-sha512;
  secret     "Dummy+Key+Strings=";  ← 作った鍵の中に書いてあるハッシュ値
};

# ACME Challenge 用 Dynamic DNS ゾーン
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 ]
※ファイル名は適当。
# Target DNS server : Dynamic DNSの更新リクエストを投げる先のDNSサーバーアドレス
dns_rfc2136_server = x.x.x.x
# Target DNS port
dns_rfc2136_port = 53
# TSIG key name : 鍵で使用したキー名
dns_rfc2136_name = ac_gwnet
# TSIG key secret : 鍵の中に書かれているハッシュ値
dns_rfc2136_secret = Dummy+Key+Strings=
# TSIG key algorithm : 鍵を作るときに使用したアルゴリズム
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名] で証明書の更新を行う。

ステージングサイトからのドメイン名削除と本番機で反映をお忘れずに。


最終:2018/09/21 19:05:22 カテゴリ:
タグ:鯖管理
  - NO COMMENT -
QRコード
携帯サイト試験運用
https://griffonworks.net/nikki/cgi-bin/k.cgi
1行板

備忘録
  • 無し
物欲リスト
  • Canon RF50mm F1.2L USM
  • SIGMA 20mm F1.4 EF Art
  • ニンバス チヌーク
  • OCB-1 ST II
ツーリング ドライブ兼野外撮影予定リスト