こんにちは。
職人見習いの高嶋です。

SSLの設定をするにあたって、最近では当たり前のように耳にするようになった
『中間証明書』や『クロスルート設定用証明書』。
正直その意味や用途を理解もせず証明書発行企業の説明文そのままに設定していたので
今回少し掘り下げて調べてみました。

そもそも私自身に『中間証明書』や『クロスルート設定用証明書』なる単語に
馴染みを持っていないのは、昔はWebサーバ上にSSLの設定をする際に
それらを必要としなかったからです。

証明書発行企業によって文言は異なるが、概ね下記のように2階層での有効性を
検証する形でした。

ルート証明書(ブラウザに標準搭載)
┗サーバ証明書(Webサーバに設定)

■Apacheでの設定例
SSLEngine on
SSLCertificateKeyFile conf/hoge.jp.key # 秘密鍵
SSLCertificateFile conf/hoge.jp.crt # サーバ証明書

こちらが2006年頃に、突如として『中間CA証明書もWebサーバに設定して下さい』という話になり、
下記のような3階層に変更されました。

ルート証明書(ブラウザに標準搭載)
┗中間CA証明書(Webサーバに設定)
┗サーバ証明書(Webサーバに設定)

■Apacheでの設定例
SSLEngine on
SSLCertificateKeyFile conf/hoge.jp.key # 秘密鍵
SSLCertificateFile conf/hoge.jp.crt # サーバ証明書
SSLCertificateChainFile conf/inca.pem # 中間CA証明書

尚、中間CA証明書は各証明書発行企業のサイト上に公開されています。

当時は特に気にも留めませんでしたが、3階層になった理由は階層が深くなる方が認証の判断が複雑になり、
不正改ざんや傍受が難しくなるという理由の他に、大規模に証明書を発行する(売っていく)為には
ルートと中間とで組織を分けて、セキュリティを保持しつつも規模を拡大する構造が必要になった、
という事のようです。

あるサイトに下記のような上手い例えがありました。

ルート証明書…運転免許証を発行している都道府県公安委員会
中間CA証明書…国民が実際に貰いに行く警察署や免許センター

そして、2010年後半頃に鍵長が1024bitから2048bitのものが推奨され、
現在では1024bitを扱っていない企業も多くなりました。
それとタイミングを同じくして、4階層という話が登場しました。

ルート証明書(ブラウザに標準搭載)
┗クロスルート設定用証明書(Webサーバに設定)
┗中間CA証明書(Webサーバに設定)
┗サーバ証明書(Webサーバに設定)

■Apacheでの設定例
SSLEngine on
SSLCertificateKeyFile conf/hoge.jp.key # 秘密鍵
SSLCertificateFile conf/hoge.jp.crt # サーバ証明書
SSLCertificateChainFile conf/inca.pem # 中間CA証明書(クロスルート証明書も同一ファイルに続けて表記)

次は『クロスルート設定用証明書』なる単語が出てきましたが、どうもこれは2048bit鍵長になった事によって、
対応していないルート証明書の割合が一気に増える為(古い携帯端末等)、そういった証明書を持つ端末からの
アクセスに対しても警告ダイアログが表示しない為の救済措置的なファイルのようです。

※クロスルート方式であっても旧端末全てをカバーする訳ではないようです。
2G機種や一部の3G機種、古いスマートフォンにも例外があるらしく、auのBREWアプリでも2048bit暗号化通信問題が
あったようです。

※この記事は、なかの人(piro556)が書いています。