No285 ルート証明書の話
皆さんはルート証明書やルートCA証明書という言葉をお聞きになったことはあるでしょうか?
この「ルート」というのは通り道のルート(route)ではなく、根っこや根幹の意味のルート(root)です。
根幹の証明書と聞くとおおげさですが、ルート証明書はサーバ証明書を作るのにも使われるちょっと特別な証明書です。
今回はこのルート証明書とその役割について解説をします。
証明書っていろんな種類がある?
このメールマガジンでは何度も「証明書」という言葉が登場していますし、その解説も何度か行っています。
情報セキュリティの世界で「証明書」は実にいろんな呼び方をしますので、まずは用語整理をしましょう。
まず以下はいずれも同じものを指します。
・証明書
・電子証明書
・X.509証明書(X.509は通信の標準化団体ITUが決めた仕様番号)
また、利用目的によってもいろんな呼ばれ方をします。
サーバ証明書:自身が正規のサーバであることの証明用
ルート証明書:認証局(後述)による自分自身の証明用
CA証明書:ルート証明書と同義
ルートCA証明書:ルート証明書と同義
中間証明書:ちょっと特殊なルート証明書(次回解説します)
クライアント証明書:サーバに接続する時の証明用
ひどく複雑そうですが、利用シーンが違うから呼び方を変えているだけです。
サーバ証明書もルート証明書もデータ形式は実はどれも同じだったりします。
どの証明書も、誰か(証明してあげる組織)が証明を必要とする誰か(証明してもらう組織)に証明を与えるものです。
今回は、この中で一番わかりにくルート証明書について解説をします。
電子証明書には何が入っているのか?
ここでの「証明書」は書面ではなく電子データの形態を取ります。
専用の用紙もなけりゃ、ハンコもありません。
電子データなんですから、そんなのあるはずありません。
ですので、印鑑のイメージや手書きの署名といった書面で使うようなデータは一切は含みません。
それでは、証明書ってナニが入っているのでしょうか?
一般的に証明書には以下の情報が含まれます。
1)証明したい内容
2)(証明する組織による)電子署名
この構造は上述の全ての証明書に共通しています。
サーバ証明書も、クライアント証明書も、ルート証明書も、同じ構成なのです。
(「証明したい内容」の具体的内容はそれぞれ異なります)
なお、電子署名については、少し前にこのメルマガで解説しましたので、今回は触れません。
ここでは、「証明したい内容」が改竄(かいざん)されていないことを第三者にもチェックできる特殊なデータと思ってください。
興味のある方は、以下のバックナンバーをご覧ください。
No277 電子署名で用いられる技術
https://note.com/egao_it/n/ne2feacb997c9
サーバ証明書の場合
さて、ここでルート証明書の説明に入る前にサーバ証明書の説明をしておきます。
サーバ証明書は「このサーバは正規のサーバですよ。ニセモノじゃないですよ」というのを証明するための証明書です。
サーバ証明書はブラウザ(ChromeやEdgeなどのインターネットブラウザ)がHTTPSという暗号化通信の最初にサーバから身分証明書として送られてきます。
サーバ証明書には次のような情報が含まれています。
・サイト名(www.google.com や www.toyota.jp といった名称)
・有効期限
・暗号化や署名に利用できる鍵の情報
・この証明書を発行(署名)した組織の情報
ブラウザはサーバ証明書を受け取るとその内容を確認して通信を開始して良いかどうかを判断します。
全てがOKならそのサーバへの接続を行い、NGなら利用者に「このサイトは安全ではありません」などと警告表示をします。
このあたりの事情も今年の4月に解説をしましたので、興味のある方は以下のバックナンバーをどうぞ。
No256 「このサイトは安全ではありません」とは何が安全じゃないのか?
https://note.com/egao_it/n/nd200fd6537b9
さて、上述の通り、サーバ証明書には発行(署名)した組織の情報が書き込まれています。以下、思い付くままに証明書の発行組織を調べてみました。
いずれも「→」の右側が証明書の発行(署名)組織です。
ドコモ、au → CyberTrust
トヨタ、資生堂 → GlobalSign
パナソニック、三菱UFJ銀行、日産、Amazon → DigiCert
CyberTrustにしてもDigiCertにしても裏方の会社ですので、聞いたことがないという方が大半でしょう。
ブラウザは何を基準にして「この証明書の発行元が信頼できる」と判断しているのでしょうか?
サーバ証明書の検証
少し話を戻しますが、サーバ証明書の検証では次のような内容をチェックします。
・証明書の情報とサイト情報が矛盾していないか
・有効期限内か?
・証明書を発行(署名)した組織は適正か?
サーバ証明書には発行した組識の署名が付いていると書きましたが、署名の正しさをチェックするには、発行した組織の「ルート証明書」が必要となります。
ルート証明書はサーバ証明書の正しさの依りどころとなる証明書です。
だから、ルート(根っこ)証明書と呼ぶのですね。
ルート証明書
上記のようなサーバ証明書を発行してくれる会社のことを「認証局」や「発行局」と呼びます。(この記事では認証局で統一します)
このような認証局は世界中に何百とありますが、特に著名な認証局は数十程度です。
こういった認証局は自分自身が正規の存在である証明書を保有しています。これをルート証明書と呼びます。
全てのサーバ証明書(に限らず全ての証明書)はルート証明書で示された認証局によって署名が行われています。ルート証明書というのは全ての証明書の正しさを保証する根幹となる証明書だから、「ルート(根っこ)」証明書と呼ばれるのです。
さて、筆者は上で「サーバ証明書もルート証明書もデータ形式は実はどれも同じ」と書きました。
ですが妙な話です。
サーバ証明書に署名をするサービスはたくさんありますが、ルート証明書に署名をしてくれるサービスなんてあるんでしょうか?
ルート証明書は自己署名
ルート証明書に署名をしてくれるサービスは存在する(後述します)のですが、ここではちょっと視点を変えてみます。
まだ認証局が全く存在しない世界を思い浮かべてください。
この世界で、最初の認証局を作ろうとした組織には誰が署名してくれるでしょうか?
まだ認証局がないのですから、署名できる組織はありません。
一方で、証明書には署名というものが必要条件ですので、署名がなくては証明書として成立しません。何でもいいから署名が必要なのです。
そのため、ルート証明書に限っては、実に意外な方式で作成が行われます。
それは自分で自分に署名をする「自己署名」です。
つまり、誰かに証明を頼むのではなく「オレは認証局ですよ」と自己宣言をするのです。
技術的には自己署名も立派な署名であり、何も問題ありません。
この点を理論的にクリアすることは不可能なため、ルート証明書が自己署名であることは仕方ないこととされています。世の認証局はそれぞれ自己署名をしたルート証明書を作成し、それをダウンロードできるように配布しています。
ですが、いくら技術的に問題なくても、信頼の依りどころとなるはずのルート証明書が自己宣言だなんて、納得しづらいですよね。
自己署名でいいなら誰でも「(技術的に)正しい」認証局が作れてしまいます。
そんなことで、世の中に混乱が生じないのでしょうか?
ブラウザはルート証明書を抱えている
上述の通り、ルート証明書をチェックしたところで、その組織が適切に運営されているかなんてことはわかりません。
というか、認証局への信頼はその組織の運営体制や財務状況といった側面から判断されるものです。ルート証明書といった技術で保証するものではありません。
話が大きくなってきましたが、実はこの答えは拍子抜けするものです。
ChromeやEdge、Firefox、Safariといったブラウザには最初から数十個の「信頼できるルート証明書」が登録されており、その状態で配布されています。
では、その数十個の「信頼できるルート証明書」は誰がチョイスするのでしょうか?
それを決めるのは、それぞれのブラウザの開発元です。
ブラウザの開発者が「この認証局は大丈夫だ」と思えば登録され、「こいつは怪しい」という認証局は除外されるのです。
その判断はブラウザの開発元によりますので、Chromeでは「安全だ」と言われるけれど、Safariでは「安全ではない」と警告されることがあり得ます。
その意味で、誰にとっても100%安全な認証局は存在しえません。
認証局を人間が運営している限り、「絶対」なんてことはそれこそ絶対にありえません。
いくらトヨタが工夫を重ねても、またホンダがいかに優れていようとも、どちらも100%安全なクルマを作れないのと同じです。
まとめ
電子証明書と呼ばれるものがあります。
電子証明書の代表格は、サーバ証明書ですが、それ以外にも利用目的によっていくつかの呼ばれ方をします。
内部構造はどれも同じです。
証明したいデータ(例えばサーバの情報)と、そのデータの正しさを証明する機関(認証局)による署名の二つのデータが存在します。
サーバ証明書というのはインターネット(Webサイト)を閲覧する時にごく日常的に利用されるものですが、利用者がそれを意識することはほぼありません。
インターネットブラウザ(Chromeなどのアプリ)が接続先が信頼できるかどうかのチェックに使うものです。
サーバ証明書の署名は認証局が作成するのですが、その署名のチェックにはルート証明書を利用します。
ルート証明書は認証局が作成し公開する証明書なのですが、何と自己署名といって自分で自分の証明を行うという一見怪しげな証明書となっています。
これはルート証明書だけに許されている特別なルールです。
これだけでは誰でも認証局やルート証明書を作れてしまい、何が信用できるのかわからなくなりますので、実際のブラウザには、ブラウザの開発元の判断で信頼できるルート証明書があらかじめ組み込まれた状態でダウンロードできるようになっています。
結局、信頼できる認証局かどうかの識別は、ブラウザの開発元の判断に頼っているのです。
今回はサーバ証明書とルート証明書の関係について解説をしました。
次回は、今回の続きとして、証明書チェインという考え方について解説します。
次回もお楽しみに。
(本稿は 2022年11月に作成しました)
本Noteはメルマガ「がんばりすぎないセキュリティ」からの転載です。
当所はセミナーなどを通して皆さんが楽しく笑顔でITを利用いただくために、 難しいセキュリティ技術をやさしく語ります。
公式サイトは https://www.egao-it.com/ です。