Apacheで OpenSSL 3.1 を使うようにしたら
参照:Apache
何だか調子悪い・・・
これまでウチの Webサーバー(Apache)では OpenSSL 1.1.1系を使っていたのだけど、折角 OpenSSL 3.1 がビルドできたのだからと、Open SSL 3.1 を使うよう Apacheを作り直してみた(*1)。そしたら Apache が起動して暫くは良いのだけど、1〜2時間ほど経つと
Safari がこんなエラーを吐いてホームページが表示されなくなってしまうと言う事に気付いた。
不思議なことに、こうなっても Apache(httpd)は動いており、別のデバイス(iPad等)で見ると正常に表示されていたりする。何か調子悪いのかな?と思って Apacheを再起動すると正常に戻るのだが、数時間後にはまた同じ現象が発生している。
Safari以外の Webブラウザ(FireFox)では "SEC_ERROR_BAD_SIGNATURE" というエラーコードで安全な接続ができないと言われる。エラーコードから判断するに、サイト証明書に無効な署名がされているので信用できないサイトと判断されたような感じだ。しかし、ウチのサイト証明書は Let's Encrypt が発行したもので、正式な認証局によって署名されているはずだ。証明書の署名が無効だと言うのなら Apache を再起動すると暫く表示できるようになるというのは何故なんだ?解せない。
この現象、OpenSSL 3.1を使うようにビルドした Apacheだけで発生する。LibreSSL(Ver.3.6.2)や OpenSSL 1系(Ver.1.1.1t)を使うようにビルドした Apacheでは発生しない事を確認した(現象が発生するまでに時間かかるので確認が大変だったが)。LibreSSL を使うと SSLCompression(HTTP圧縮)設定をオフにできない(HTTP圧縮をするとHTTPヘッダ漏洩のおそれがある:(*2))ので、現在は OpenSSL 1.1.1t を使う Apache に戻してある。
今後どうするかは原因調査も含めて検討中。
Open SSL 3.0系(3.0.8)でも同じ現象が発生するようだ。
(*1):ただし、まだ Apache は OpenSSL 3系に正式対応していないので、あくまでお試しなのだが。
(*2):3/25追記
LibreSSL は(TLSに対するCRIME攻撃を防止するため)そもそもHTTP圧縮機能をサポートしていないとのことなので、Apache の SSLCompression設定は削除しても問題ないそうだ。逆に "SSLCompression off" の記述があると、Apache がエラーで起動できなくなるので注意。
よって、ウチの Apache は OpenSSL 3系に移行するのではなく、LibreSSL に移行することにした。
|