Apache 2.4.33のmod_mdを有効にするとLet's EncryptのWebroot Authenticatorが失敗する罠
Apache 2.4.33から(試験的に?)組み込まれたmod_mdを有効にすると...
/.well-known/acme-challenge/ へのアクセスがブロックされる
Let's EncryptのWebroot Authenticatorは/.well-known/acme-challenge/の下に認証ファイルを作成するのですが、Apacheはその認証ファイルへのアクセスをブロックして404エラーを返すため、SSL証明書の更新に失敗するという症状に悩まされました。モジュールでロードしている場合はコメント化してロードさせないようにすれば良いです。configureで"--enable-md"を指定しなくても勝手に組み込まれるようで、Static Buildしている場合は無効に出来ないっぽいです。
応急処置としては以下のようにAuthenticatorをwebrootからstandaloneにすると良いです。
# sed -i '/^authenticator =/s|webroot|standalone|' /etc/letsencrypt/renewal/*.conf # certbot renew --force-renewal --pre-hook '/usr/bin/systemctl stop httpd' --post-hook '/usr/bin/systemctl start httpd'
本来はmod_mdで管理すべきなのでしょうが、自分の環境では上手く動かなかったのです。要調査ですねぇ...。
- Apache の ACMEモジュールで Let's Encrypt 証明書を取得してみた | あぱーブログ
- Let’s Encrypt 証明書の更新方法を dehydrate から mod_md に。 – o6asan's soliloquy-part2
=2018年5月24日追記=
SSLCertificateChainFileディレクティブを削除。中間CA証明書はサーバ証明書と一つの証明書ファイルとしてまとめて、SSLCertificateFileディレクティブに指定したら、mod_mdで動作するようになりました。Apacheのバージョンが2.4.33なので、SSLCertificateChainFileディレクティブを設定するとmod_mdでエラーになるらしい。
SSLCertificateChainFile is deprecated
(SSLCertificateChainFileは非推奨です)SSLCertificateChainFile became obsolete with version 2.4.8, when SSLCertificateFile was extended to also load intermediate CA certificates from the server certificate file.
(SSLCertificateChainFileは、SSLCertificateFileが拡張されてサーバー証明書ファイルから中間CA証明書もロードされると、バージョン2.4.8で廃止されました。)
そもそもSSLCertificateChainFileディレクティブはApache 2.4.8から廃止されたとのこと。設定してもFatal errorにならなかったから気付かなかった。。。昔からのやり方をずっと踏襲していると、こういう落とし穴もあるということですねぇ。