デジタル証明書 (digital certificate)、 公開鍵証明書 (public key certificate) あるいは 単に 証明書 (certificate) とは、 以下のデータが記されている文書である:
以下の公開鍵 XXX の所有者は YYY であり、その有効期間は AAA 〜 BBB であることを証明する。 -- 署名 ZZZ
証明書の書式は、 X.509 と呼ばれる規格に準拠している。 証明書は通常インターネット上の Webサーバで使われており、ブラウザ上で見ることができる:
実際にWebサーバが証明書を送っているところは、openssl
コマンドを使うと見ることができる。
$ openssl s_client -showcerts -servername www.google.com -connect www.google.com:443 CONNECTED(00000005) ... --- Certificate chain0 s:/CN=www.google.com i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1C3 -----BEGIN CERTIFICATE----- MIIEiDCCA3CgAwIBAgIRAI/Wbxh84E0gEre31m3+iM0wDQYJKoZIhvcNAQELBQAw ... -----END CERTIFICATE-----1 s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1C3 i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1 -----BEGIN CERTIFICATE----- MIIFljCCA36gAwIBAgINAgO8U1lrNMcY9QFQZjANBgkqhkiG9w0BAQsFADBHMQsw ... -----END CERTIFICATE-----2 s:/C=US/O=Google Trust Services LLC/CN=GTS Root R1 i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA -----BEGIN CERTIFICATE----- MIIFYjCCBEqgAwIBAgIQd70NbNs2+RrqIQ/E8FjTDTANBgkqhkiG9w0BAQsFADBX ... -----END CERTIFICATE-----...
実際の証明書は「チェーン」になっている。 上の証明書チェーンは、以下の情報を表している。
0. 以下の公開鍵 MIIEiDCCA3C... の所有者は www.google.com であり、その有効期間は 2022/12/12 〜 2023/03/06 であることを証明する。 -- 署名 GTS CA 1C31. 以下の公開鍵 MIIFljCCA36... の所有者は GTS CA 1C3 であり、その有効期間は 2020/08/13 〜 2027/09/30 であることを証明する。 -- 署名 GTS Root R12. 以下の公開鍵 MIIFYjCCBEq... の所有者は GTS Root R1 であり、その有効期間は 2020/06/19 〜 2028/01/28 であることを証明する。 -- 署名 GlobalSign Root CA
インターネットにおいては、情報が正当かどうかを確認するために デジタル署名 (digital signature) がよく使われる。 これは暗号化通信において、とくに重要である。 悪者も暗号は使えるので、たとえば正当な相手のフリをして 自分と暗号を使って通信すれば、結局のところ情報は悪者の手に渡ってしまう。 (中間者攻撃)
これを防ぐために、ウェブブラウザでは通信相手のサーバ名が正しいかどうかを 認証局 (CA) と呼ばれる第三者機関に確認してもらうことによっ て「安全」というお墨付きを得ている。 いわゆる「鍵マーク」は、このお墨付きによるものである。 この確認処理は、ある個人・組織が固有の「署名」をブラウザに送り、 ブラウザがその署名を「検証」することによって行われる。 具体的には:
デジタル証明書は認証局が発行し、 ここで使われる公開鍵が本当にその個人・組織に 所属するという証明として使われる。
なお、通信相手ではなく ソフトウェアの発行元の正当性を証明するのに 使われるデジタル証明書 (コードサイニング証明書) もある。
一般的に、証明書は単一で使われることは少なく、複数の証明書がつながった「チェーン」になっている。 これはリスク分散のためである。 ひとつの認証局が多くの証明書を発行することはリスクをともなう。 証明書を作成するには秘密鍵を使う必要があるため、多くの証明書を発行すれば それだけ秘密鍵が漏洩・悪用されるリスクが高まるためである。
これを解決するために、認証局はいくつかの階層に分けられている。 まず、もっとも上位にある「ルート認証局 (Root CA)」が、その下位の「中間認証局」の証明書を発行し、 いくつかの段階をへて、中間認証局が最終的なウェブサイトの証明書を発行する。 たとえば、以下のような証明書チェーンを考える:
- 認証局A: 公開鍵Xの所有者は認証局Bであることを証明する。
- 認証局B: 公開鍵Yの所有者は認証局Cであることを証明する。
- ...
- 認証局C: 公開鍵Zの所有者は
www.example.com
であることを証明する。
ルート認証局は、秘密鍵の安全を保つため、
エンドユーザであるサイト向けの証明書は直接発行しない。しかし
信頼の連鎖により、ルート認証局Aを信頼していれば、
最終的に www.example.com
を信頼できることになる。
たとえ認証局Cの秘密鍵が漏洩・悪用された場合でも、被害を受けるサイトは
その認証局以下だけに限定することができる。
ルート認証局は 世界に100箇所以上ある。 では、ルート認証局自体はどうやって信頼するのか? 実はインターネットに接続するすべての機器・ソフトウェアには ルート認証局のデジタル証明書が最初から内蔵されている。 したがって、パソコンやスマートフォンを買った時点で、 これらのルート認証局を信用したことになる。
通常は、エンドユーザがとくにデジタル証明書を意識することはない。 しかしサイトを管理する場合 (あるいはソフトウェアを配布する場合) は 認証局から定期的に証明書を発行してもらう必要がある:
このときに注意すべきこととして:
証明書の有効期限も、証明書のチェーンと同様にリスク緩和が目的である。 未来は予測できないため、現在は正しい情報も、将来のある時点で正しくなくなるかもしれない。 正しくなくなった証明書を失効させるために 証明書失効リストや OCSPのような仕組みが用意されているが、 証明書の有効期限はこれらの仕組みが使えない場合にそなえて時間的な「柵」を提供している。
証明書の有効期限が切れたサイトにアクセスすると、以下のような恐ろしいメッセージが表示され、 ユーザに不安を与えることになる。