SSL/TLS証明書をcertbotで発行に失敗

Let's EncryptのSSL/TLS証明書をcertbotで発行しようとしたら、なぜか「Congratulations!」にならなくて詰まった時の話。

環境

あとはDjangoでNginxなんだけど、原因になっているっぽいのが上の3つだと思う。VPSとメールを同じドメインで使っていて、そのときのネームサーバー(DNSサーバー)のレコード設定が原因だったと思う。設定はさくらのVPSとメールボックスを同ドメイン利用するネームサーバ設定を参考に行った。※設定を間違えているわけではないと思う。

問題から解決まで

いろんなサイトとか参考にしながらcertbotSSL/TLS証明証を発行しようとする。成功したときは「Congratulations!」って出るんだけど、出たのは以下

IMPORTANT NOTES: - The following errors were reported by the server:

​ Domain: XXX
​ Type: connection
​ Detail: Fetching

http://XXX/.well-known/acme-challenge/XXX: Connection refused

To fix these errors, please make sure that your domain name was entered correctly and the DNS A/AAAA record(s) for that domain contain(s) the right IP address. Additionally, please check that your computer has a publicly routable IP address and that no firewalls are preventing the server from communicating with the client. If you're using the webroot plugin, you should also verify that you are serving files from the webroot path you provided. - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal.

ちゃんとドメインでWebページへアクセス出来ていたので、最初はネームサーバーの設定を疑っていなかった。調べまわっていろいろ試してみるもののどれもダメで(/.well-known/acme-challenge/を手作りしたり)、どうしたもんかとログを眺めているとちょっと引っかかるポイントがあった。

      "validationRecord": [
        {
          "url": "XXX",
          "hostname": "XXX",
          "port": "80",
          "addressesResolved": [
            "AA.AAA.AAA.AAA",   ←メールサーバーのアドレス
            "BBB.BB.BB.B"       ←VPSのアドレス
          ],
          "addressUsed": "AA.AAA.AAA.AAA"   ←メールサーバーのアドレス
        }
      ]

なんかメールサーバーのアドレスが使われているっぽい。で、どういう選び方をしているかは解らないけど、ネームサーバーのAレコードの順番を入れ替えたらうまくいきました。

変更前
タイプ データ
・・・ ・・・
A メールサーバーのアドレス
A VPSのアドレス
変更後
タイプ データ
・・・ ・・・
A VPSのアドレス
A メールサーバーのアドレス

まとめ

  • ログ見なければ解決できなかったと思う。ログを見よう!
  • でも、Webアプリ開発を通して初めて己の力で問題解決できた気がしてちょっと嬉しかった。「Congratulations!」を見た時は高いガッツポーズが出た。
  • /.well-known/acme-challenge/「アクメチャレンジ」って何回も読んだ。