Apache2.4のSSLCertificateChainFileについて
【Apache 2.4】RHEL 8/9/10時代のSSL証明書設定、「SSLCertificateChainFileは不要?
RHEL 8や9、そして10への移行を進める中で、Apache(httpd)のSSL設定を見直すとApahceには、SSLCertificateChainFileは、非推奨となっているのに自分も使っていました。
設定を入れても使えるんで気付かずに使っていたみたいです。この2つは以前のApahce2.2系では以下のような役割がありました
- 以前(2.4.7まで):
- SSLCertificateChainFile(中間一致証明書) : サーバ証明書とルート証明書を繋ぐ「中間CA証明書」を指定する。
- 現在(2.4.8以降):
- SSLCertificateChainFile(中間一致証明書) : 2.4.8以降で非推奨となりました。中間証明書の内容を、サーバー証明書(SSLCertificateFile で指定するファイル)の末尾に直接追記(結合)する方式に変わりました。
そのまま残しておくとどうなる?
今すぐエラーで Apache が起動しなくなるわけではありませんが、以下のデメリットがあります。
- 起動時の警告: Apache のエラーログ(error_log)に「SSLCertificateChainFile is deprecated」といった警告が出る場合があります。
- 今後のアップデート: RHEL 10 やその次のバージョンで、このディレクティブ自体が完全に削除(廃止)される可能性があり、その時に突然 Apache が起動しなくなるリスクがあります。
SSLCACertificateFileについて
Apache2.2系のSSL証明書のサイトで「SSLCACertificateFile」に中間証明書を記載する記事を多く見受けれます。また、実際にApache2.2系ではこの「SSLCACertificateFile」に中間証明書とかをくっつけても動きます。
本来は、中間証明書は「SSLCertificateChainFile 」で指定するのに「SSLCACertificateFile」でも動作しますし、この「SSLCACertificateFile」を指定する記事があります、なぜこの証明書で動くか説明します
SSLCACertificateFile
- 意味: サーバーが「信頼する認証局(CA)」のルート証明書をまとめたファイルを指定します。
- 用途: 接続してきたユーザー(クライアント)が提示する「クライアント証明書」が、ここで指定した正当な認証局から発行されたものかを確認するために使われます。
Apache 2.2 の実装において、SSLCACertificateFile に指定された証明書は、メモリ上の「信頼されたCAリスト」に読み込まれます。 ブラウザと接続する際、Apacheが「サーバー証明書の親が見当たらないな」と判断すると、この**「信頼されたCAリスト」の中から一致する中間証明書を探し出し、勝手に補完してブラウザへ送ってくれる**という挙動をします。
いわば、「クライアント認証用の名簿」を「中間証明書の予備倉庫」として流用している状態です。
また、この中間証明書自体が利用するケースが古いOSの場合は、最新のR6ルートのルート証明書がないケースがあり、この中間証明書を利用すうケースがあります
Apache 2.4系の中間証明書を指定する方法
Apache2.4系の中間証明書は、サーバー証明書と中間証明書を1つのファイルに結合して、SSLCertificateFileだけで指定します。
SSLCertificateFile /path/to/fullchain.pem # ←サーバー+中間証明書 SSLCertificateKeyFile /path/to/privkey.pem
Certbotで発行する場合は中間証明書はどうするのか?
Certbotで証明書を発行すると、/etc/letsencrypt/live/ドメイン名/ 以下に複数のファイルが生成されます。発行された証明書の家で、fullchain.pem の証明書は、 「サーバー証明書」と「中間証明書」が1つのファイルに連結されていますのでこれを利用してApacheに以下のように設定します
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Certbotの各ファイルとディレクティブの対応表
| ファイル名 | 内容 | 対応するディレクティブ |
fullchain.pem | サーバー証明書 + 中間証明書 | SSLCertificateFile |
privkey.pem | 秘密鍵 | SSLCertificateKeyFile |
cert.pem | サーバー証明書のみ | (現在は単体ではあまり使わない) |
chain.pem | 中間証明書のみ | (現在は単体ではあまり使わない) |

