SSLは中間証明書を設定すべし

SSLは中間証明書を設定することが基本となっている。漏れがあっても暗号化はされ、一見見逃し気味なので注意が必要だ。

SSLCertificateFile /etc/httpd/ssl/www2025.crt
SSLCertificateKeyFile /etc/httpd/ssl/www2025.key

不十分かもしれない。

-rw-r--r-- 1 root root 1688 May 26 2025 www2025.cer
-rw-r--r-- 1 root root 2236 May 26 2025 www2025.crt
-rw-r--r-- 1 root root 1115 May 26 2025 www2025.csr
-rw-r--r-- 1 root root 1675 May 26 2025 www2025.key

中間証明書が分かれているwww2025.cer

# cd /etc/httdp/ssl/
# cat www2025.crt www2025.cer > www2025_fullchain.crt

# vi /etc/httpd/www.conf
-+ SSLCertificateFile /etc/httpd/ssl/www_fullchain.crt

フルチェーンを用意し、SSLの証明書ファイルを指定する

サーバー証明書をブラウザやOSが信頼するために必要な「証明書チェーン」を完成させる役割を持つためです。中間証明書が欠けると、多くの環境で「安全ではありません」「証明書が信頼されていません」といったエラーが発生する場合があります。

🔍 中間証明書が必要な理由

  • 信頼の連鎖(証明書チェーン)を構築するため サーバー証明書 → 中間証明書 → ルート証明書という階層構造で信頼が成立します。 中間証明書がないと、ブラウザはルート証明書まで辿れず「信頼できない」と判断します。
  • ルート証明書を直接使わないための安全設計 ルート証明書は非常に重要で、直接サーバー証明書を署名するとリスクが大きいため、中間証明書が間に入る構造になっています。
  • 管理・更新の柔軟性のため 中間証明書を使うことで、CAは用途別に証明書を管理しやすくなり、問題発生時の影響範囲も限定できます。

⚠️ 中間証明書を設定しないと起こるトラブル

  • ブラウザ警告が出る(Chrome/Safari/Edge など) 「この接続は安全ではありません」「証明書が信頼されていません」など。
  • スマホだけ接続できない問題 PCでは繋がるのにスマホでエラーになる典型的な原因。
  • API通信・メール送信(SMTP)などが失敗 サーバー間通信でも証明書チェーンが不完全だと検証エラーになります。
  • TLSハンドシェイクが失敗する 中間証明書がないと「発行元不明」と判断され、通信が確立しません。

🛠️ 正しい設定のポイント

  • CAから提供される bundle.crt / ca-bundle.crt を必ず設定する
  • Apache:SSLCertificateChainFile などで中間証明書を指定
  • Nginx:fullchain.crt(サーバー証明書+中間証明書)を設定