Let's Encryptで証明書更新をしたのですが、Connection refused となってしまったので、原因を調べてみました。以下がエラーになったときのログです。ドメイン、IPは伏せています。
# certbot renew --dry-run Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/web.example.com.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Simulating renewal of an existing certificate for web.example.com Certbot failed to authenticate some domains (authenticator: webroot). The Certificate Authority reported these problems: Domain: web.example.com Type: connection Detail: xxx.xxx.xxx.xxx: Fetching https://web.example.com/.well-known/acme-challenge/9109eVHrvSxOWX3e1EM94RDM42AGDBEk6pamz0Rm6qE: Connection refused Hint: The Certificate Authority failed to download the temporary challenge files created by Certbot. Ensure that the listed domains serve their content from the provided --webroot-path/-w and that files created there can be downloaded from the internet. Failed to renew certificate web.example.com with error: Some challenges have failed. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - All simulated renewals failed. The following certificates could not be renewed: /etc/letsencrypt/live/web.example.com/fullchain.pem (failure) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 renew failure(s), 0 parse failure(s) Ask for help or search for solutions at https://community.letsencrypt.org. See the logfile /var/log/letsencrypt/letsencrypt.log or re-run Certbot with -v for more details.
certbotが https://web.example.com/.well-known 配下に一時ファイルを作成していて、それをLet's Encryptの認証局がダウンロードするようなのだけど、それができないらしい。certbot renew をして別画面を立ち上げて .well-known フォルダが作成されるかを確認したところ、フォルダは作成されているのはわかりました。ということは、外部からは .well-known フォルダがわかっていないらしい。
/var/log/letsencrypt/letsencrypt.log が出ているので、そちらを見てみたらポート80とポート443とではIPアドレスの名前解決方法が違うようです。ポート80ではIPv4を使い、ポート443ではIPv6を使っていることがわかりました。以下が、letsencrypt.log の抜粋です。
{ "url": "http://web.example.com/.well-known/acme-challenge/9109eVHrvSxOWX3e1EM94RDM42AGDBEk6pamz0Rm6qE", "hostname": "web.example.com", "port": "80", "addressesResolved": [ "xxx.xxx.xxx.xxx", "2406:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:1291" ], "addressUsed": "xxx.xxx.xxx.xxx" }, { "url": "https://web.example.com/.well-known/acme-challenge/9109eVHrvSxOWX3e1EM94RDM42AGDBEk6pamz0Rm6qE", "hostname": "web.example.com", "port": "443", "addressesResolved": [ "xxx.xxx.xxx.xxx", "2406:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:1291" ], "addressUsed": "2406:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:1291" }
DNSの名前解決でIPv6を登録したのですが、どうやらそれが原因だったようです。なので、DNSのIPv6の名前解決を削除して改めて certbot renew をしてみました。
# certbot renew --dry-run Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/web.example.com.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Simulating renewal of an existing certificate for web.example.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations, all simulated renewals succeeded: /etc/letsencrypt/live/web.example.com/fullchain.pem (success) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
成功しました!
どうやらIPv6の名前解決に原因があったようでした。