Webシステム開発 雑記帳 /

話題の無料SSL証明書!Let’s Encryptで証明書の取得に失敗したときに確認すること

以前から話題になっていた、無料でSSL証明書を発行できるサービス Let’s Encrypt。
Googleの段階的セキュリティ強化の予告から数カ月が経ち、このサービスを利用して常時SSL化を進めている方も多いのではないでしょうか?

常時SSL化の関心が高まったことで、Let’s Encryptのインストールや設定方法に関するまとめサイトが多くある一方、うっかりミスで証明書の取得がうまくいかなかったり、原因が突き止められなかったりという方も多いようです。

そこで今回は、Let’s Encryptで証明書の取得に失敗したときに、まず確認したいポイント3つをご紹介したいと思います。

↓Let’s Encryptで証明書の取得に失敗した時のエラーメッセージ
IMPORTANT NOTES:
– The following errors were reported by the server:
(~ 中略 ~)
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.

Let’s Encryptを使うメリット

Let’s Encryptを使うメリットは、無料でSSL証明書を使える以外にも、これまで時間のかかっていた申請手続きのプロセスが自動になったことで、短時間でSSL証明書の発行を済ますことができるようになった点です。
申請を依頼することなく、自分一人で完結できて、WEBサーバーの再起動も必要なく反映されます。

Let’s Encryptで証明書を発行する仕組み

Let’s Encryptは、DNSに登録されているAレコードを利用します。
HTTP経由で特定のファイル(.well-known)にアクセスすることでドメイン所有者の確認を行います。

証明書を取得する際、ドキュメントルートに.well-knownが自動的に生成されますが、この.well-knownフォルダにアクセスができないと、証明書の取得に失敗することになります。

例えば、hogehoge.comの証明書が欲しいと要求してきた人が、本当にhogehoge.comの所有者か確認する方法として.well-knownが使われます。

取得失敗時に確認すること

失敗の多くは、上記の、ホームディレクトリの.well-knownにアクセスできずエラーが発生することによって起こります。 失敗した時にまず確認することは以下3項目で、どれも初歩的なだけに意外と気が付かないことがあるので注意が必要です。

(1)発行コマンドの記述(パス)ミスはないか?
(2)htaccessで余計なリダイレクトをさせていないか?
(3)ルータやファイアウォールで80、443ポートを制限していないか?
(1)発行コマンドの記述(パス)ミスはないか?

以下は、証明書を発行する時に使う代表的なコマンドですが、-w オプションのホームディレクトリのパスを間違うと当然.well-knownにアクセスできないので証明書の取得に失敗します。パスの確認は必須です。

▼代表的なオプション例
–webroot : ホームディレクトリにファイルを設置する形で証明書の申請を行う
-w : ホームディレクトリ のパス
-d : SSL化するドメインを指定
–agree-tos -n: ユーザーからの入力を一切求められない(スクリプト等を使う時に便利)
(2)htaccessで余計なリダイレクトをさせていないか?

サイトのリニューアル時、新旧URLを301リダイレクトすることは多いと思いますが、 リダイレクト文が冗長だったり、CMSなどで複雑なURLルーティングをしていたりすると、.well-knownにうまくアクセスできないこともあるので、見直してみるといいと思います。

また以下は「hogehoge.com」をwwwありのURLに統一する時の301リダイレクトの内容になりますが、RewriteCondで.well-knownだけはリダイレクト対象外としてしまう手もあります。

(3)ルータやファイアウォールで80、443ポートを制限していないか?

Let’s Encryptは、対象ドメインが存在しているかホスト名で正しく通信できるか試して判別します。
環境によっては、ファイアウォールが通信をブロックしていることがあるので、通信を許可する設定になっているか確認してみてください。

エラーログの場所

Let’s Encryptのエラーログは以下に保存されています。
エラーログを紐解くことで、失敗の原因を速やかに突き止めることができると思いますので、失敗したときのログ確認は重要です。

/var/log/letsencrypt/letsencrypt.log

この記事を書いた人

堀孝文

PAGE TOP