デジタル証明書とは何か?

Yusuke Shinyama, Jan. 2023

1. 証明書 (certificate) とは何か?

デジタル証明書 (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 chain
0 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 1C3
1. 以下の公開鍵 MIIFljCCA36... の所有者は GTS CA 1C3 であり、その有効期間は 2020/08/13 〜 2027/09/30 であることを証明する。 -- 署名 GTS Root R1
2. 以下の公開鍵 MIIFYjCCBEq... の所有者は GTS Root R1 であり、その有効期間は 2020/06/19 〜 2028/01/28 であることを証明する。 -- 署名 GlobalSign Root CA

2. 何のために使うのか?

インターネットにおいては、情報が正当かどうかを確認するために デジタル署名 (digital signature) がよく使われる。 これは暗号化通信において、とくに重要である。 悪者も暗号は使えるので、たとえば正当な相手のフリをして 自分と暗号を使って通信すれば、結局のところ情報は悪者の手に渡ってしまう。 (中間者攻撃)

暗号 自分 悪者 (中間者) 本当に通信したい相手

これを防ぐために、ウェブブラウザでは通信相手のサーバ名が正しいかどうかを 認証局 (CA) と呼ばれる第三者機関に確認してもらうことによっ て「安全」というお墨付きを得ている。 いわゆる「鍵マーク」は、このお墨付きによるものである。 この確認処理は、ある個人・組織が固有の「署名」をブラウザに送り、 ブラウザがその署名を「検証」することによって行われる。 具体的には:

  1. 特定の個人・組織が固有の秘密鍵を用いて署名データを作成する。
  2. ブラウザは、その秘密鍵に対応する公開鍵を使ってデータを検証する。

デジタル証明書は認証局が発行し、 ここで使われる公開鍵が本当にその個人・組織に 所属するという証明として使われる。

認証局 (CA) ブラウザ www.google.com 証明書 Google: 署名: Google

なお、通信相手ではなく ソフトウェアの発行元の正当性を証明するのに 使われるデジタル証明書 (コードサイニング証明書) もある。

3. なぜチェーンが必要なのか?

一般的に、証明書は単一で使われることは少なく、複数の証明書がつながった「チェーン」になっている。 これはリスク分散のためである。 ひとつの認証局が多くの証明書を発行することはリスクをともなう。 証明書を作成するには秘密鍵を使う必要があるため、多くの証明書を発行すれば それだけ秘密鍵が漏洩・悪用されるリスクが高まるためである。

認証局 (CA) 証明書 証明書 証明書 証明書 ...

これを解決するために、認証局はいくつかの階層に分けられている。 まず、もっとも上位にある「ルート認証局 (Root CA)」が、その下位の「中間認証局」の証明書を発行し、 いくつかの段階をへて、中間認証局が最終的なウェブサイトの証明書を発行する。 たとえば、以下のような証明書チェーンを考える:

証明書 ルート認証局A 中間認証局B 中間認証局C www.example.com ... ... ...

ルート認証局は、秘密鍵の安全を保つため、 エンドユーザであるサイト向けの証明書は直接発行しない。しかし 信頼の連鎖により、ルート認証局Aを信頼していれば、 最終的に www.example.com を信頼できることになる。 たとえ認証局Cの秘密鍵が漏洩・悪用された場合でも、被害を受けるサイトは その認証局以下だけに限定することができる。

ルート認証局は 世界に100箇所以上ある。 では、ルート認証局自体はどうやって信頼するのか? 実はインターネットに接続するすべての機器・ソフトウェアには ルート認証局のデジタル証明書が最初から内蔵されている。 したがって、パソコンやスマートフォンを買った時点で、 これらのルート認証局を信用したことになる。

4. 証明書を発行してもらうには

通常は、エンドユーザがとくにデジタル証明書を意識することはない。 しかしサイトを管理する場合 (あるいはソフトウェアを配布する場合) は 認証局から定期的に証明書を発行してもらう必要がある:

  1. 秘密鍵と公開鍵を作成する。
  2. 公開鍵を認証局に送る。
  3. 認証局が署名した証明書を受け取り、サーバに設定する。

このときに注意すべきこととして:

なぜ証明書には有効期限があるのか?

証明書の有効期限も、証明書のチェーンと同様にリスク緩和が目的である。 未来は予測できないため、現在は正しい情報も、将来のある時点で正しくなくなるかもしれない。 正しくなくなった証明書を失効させるために 証明書失効リストOCSPのような仕組みが用意されているが、 証明書の有効期限はこれらの仕組みが使えない場合にそなえて時間的な「柵」を提供している。

証明書 証明書の有効期間 失効 情報が 正しい期間 情報が 正しくない期間

有効期限が切れるとどうなるのか?

証明書の有効期限が切れたサイトにアクセスすると、以下のような恐ろしいメッセージが表示され、 ユーザに不安を与えることになる。


Yusuke Shinyama