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で管理すべきなのでしょうが、自分の環境では上手く動かなかったのです。要調査ですねぇ...。

=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にならなかったから気付かなかった。。。昔からのやり方をずっと踏襲していると、こういう落とし穴もあるということですねぇ。