
Let’s Encrypt
ブログの移転に伴いSSLを再発行したのだが何度やってもLet’s EncryptのエージェントがTimeoutエラーとSSLの発行ができない事態が発生。
サクッと終わるはずの作業だったのに、えらい時間を費やしてしまった。
調査開始
まず事象の確認。下記のとおりエージェントを利用してSSLを発行。
certbot-auto certonly --webroot -w /xxx/yyy/zzz -d tulist.club --email xxxx@yyyy.zzz
数秒後に下記のとおりエラーとなる。
Failed authorization procedure. tulist.club (http-01): urn:acme:error:connection :: The server could not connect to the client to verify the domain :: Fetching http://tulist.club/.well-known/acme-challenge/H4vJwFenyVcVHa4frPa2O0MB2bModhr6xavDuII7qss: Timeout IMPORTANT NOTES: - The following errors were reported by the server: Domain: tulist.club Type: connection Detail: Fetching http://tulist.club/.well-known/acme-challenge/xxxxxyyyyyzzzzz: Timeout
さて困ったぞ。
エージェントを実行すると
Saving debug log to /var/log/letsencrypt/letsencrypt.log
という出力があるので、ログを見てみることにする。
ちょっと長めなので一部抜粋。
{ "type": "http-01", "status": "invalid", "error": { "type": "urn:acme:error:connection", "detail": "Fetching http://tulist.club/.well-known/acme-challenge/xxxxxyyyyyzzzzz: Timeout", "status": 400 }, "uri": "https://acme-v01.api.letsencrypt.org/acme/challenge/xxxxxyyyyyzzzzz/1962102428", "token": "xxxxxyyyyyzzzzz", "keyAuthorization": "xxxxxyyyyyzzzzz", "validationRecord": [ { "url": "http://tulist.club/.well-known/acme-challenge/xxxxxyyyyyzzzzz", "hostname": "tulist.club", "port": "80", "addressesResolved": [ "11.22.33.44", "2001:aaa:bbb:ccc:ddd:eee:fff:80" ], "addressUsed": "2001:aaa:bbb:ccc:ddd:eee:fff:80", "addressesTried": [] } ] },
この中でも気になるのが下記の部分
"addressesResolved": [ "11.22.33.44", "2001:aaa:bbb:ccc:ddd:eee:fff:80" ], "addressUsed": "2001:aaa:bbb:ccc:ddd:eee:fff:80", "addressesTried": [] }
DNSの設定でAレコードとAAAAレコードを設定しているため、tulist.clubにはIPv4とIPv6で名前解決することができる。
ログを見ると、”addressUsed”: “2001:aaa:bbb:ccc:ddd:eee:fff:80” とあるのでIPv6でアクセスしてきているようだ。
だけど、IPv6でWebサーバーが応答するような設定していないため、ドキュメントルート以下に設置されたファイルにアクセスできていないことが分かる。
解決方法
調査に書いた通り、IPv6でアクセスして応答できないことが問題であるため、対策としては下記のとおり。
- IPv6に対応する
- IPv6でアクセスできないようにする
本来ならIPv6にするのが理想的な対応なのだろうけど、まだIPv6に対応した際の潜在的な問題を正しく把握していないため、IPv6でアクセスできないようにする方法を採用。
具体的にはAAAAレコードを削除することになる。
AAAAレコードを削除して、digコマンドでもAAAAレコードが取得できないことを確認後、もう一度エージェントを実行。
無事にSSLを発行することができました!!
今日の教訓!
無駄な開放をしない!