AWS Certificate Manger へスイッチ

このブログでも何度か Let’s Encrypt について触れてきたけど、ここで AWS Certificate Switch にスイッチすることにした。

Let’s Encrypt の取り組みには強く共感するものの、ふたつ問題があった。

  • サービスの特性上、trial & error を繰り返すとアカウントをロックされる (SSL 証明書の自動更新のためのスクリプトをデバッグ中にロックされるのはちょっと…)
  • ワイルドカード証明書を利用できない

一方の AWS Certificate Manger だが、これは驚くほど簡単に設定できた。単に AWS コンソールでぽちぽちクリックして、ALB に「この証明書を使ってちょうだい」と設定するだけで設定が終わった。

そういうわけで、ようやく僕のブログも HTTPS でホストできるようになった。ワイルドカード証明書さまさまだ。

実は WordPress と縁を切ろうと思っており、ごにょごにょしていたんだけど、前述の通り Let’s Encrypt でアカウントをロックされたあたりで気持ちが萎えていたのであった。AWS にロックインされるのは好ましくはないけど、もはや仕事でも AWS にどっぷり浸かっているし、逃げられないところまで来てしまった気がする。そうであれば、逆にどんどん AWS を使い倒せるように自分を持っていく方がいいかもしれない。

Let’s Encrypt が証明書の更新時に “Could not connect to example.com” とエラーを返す場合の対処

mahata.org は Let’s Encrypt で SSL 証明書を作成/更新している。

Cron に仕込んでいた SSL 証明書の更新スクリプトが “Could not connect to mahata.org” というエラーメッセージで失敗していたので、少し調べてみた。全体のエラーメッセージは次の通りだ:

Failed authorization procedure. www.mahata.org (http-01): urn:acme:error:connection :: The server could not connect to the client to verify the domain :: Could not connect to www.mahata.org, mahata.org (http-01): urn:acme:error:connection :: The server could not connect to the client to verify the domain :: Could not connect to mahata.org

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

   Domain: www.mahata.org
   Type:   connection
   Detail: Could not connect to www.mahata.org

   Domain: mahata.org
   Type:   connection
   Detail: Could not connect to mahata.org

   To fix these errors, please make sure that your domain name was
   entered correctly and the DNS A 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.

Let’s Encrypt の更新スクリプトは GitHub に上げてある。これを何もオプションをつけずに実行するだけだ (注意: スクリプト先頭の環境変数は僕の環境固有のもの)。

少し調べてみたところ、Let’s Encrypt の認証サーバが mahata.org ドメインのバリデーションをするとき、80 番と 443 番ポートのどちらでバリデートしてもらうか選択できるようであった。公式のドキュメントには次のように書かれている:

To obtain a cert using a “standalone” webserver, you can use the standalone plugin by including certonly and –standalone on the command line. This plugin needs to bind to port 80 or 443 in order to perform domain validation, so you may need to stop your existing webserver. To control which port the plugin uses, include one of the options shown below on the command line.

  • –preferred-challenges http to use port 80
  • –preferred-challenges tls-sni to use port 443

僕は --preferred-challenges を指定せず、手を抜いて 80 番ポートを公開することで問題を解決した。