PKIとは
署名を検証するためには、署名者の本物の公開鍵が必要です。
自分で所有している公開鍵が本物であることを証明する仕組みが、PKI(公開鍵基盤)です。
公開鍵が本物であることの証明書を、公開鍵証明書(CERT)といいます。
また、認証局はCAと呼ばれます。
※SSHのように公開鍵を本人から直接もらう場合には、公開鍵証明書は不要です。
証明証には、公開鍵とCAの署名があります。
勝手に公開鍵をすり替えると、CAの秘密鍵を知らない攻撃者はCAの署名を再度実施することができないため、すぐにバレてしまいます。
公開鍵証明書
記載された公開鍵が、記載されている所有者本人のものであることを認証局(CA)が証明する文書です。
公開鍵は、以下の場面で利用されます。
- 暗号通信する:受信者の公開鍵を用いて、データを暗号化する
- 署名を検証する:署名の公開鍵を用いて署名を検証する
公開鍵証明書のフォーマット
公開鍵証明書のフォーマットは、X.509によって規格化されています。
内容は次の通りです。これらの情報が改ざんされていないことを検証できるように、CAの署名がつけられます。
- シリアル番号:証明書を発行した認証局が一意に割り当てる番号(通し番号)
- 有効期限:有効期限が切れたら、再発行。数ヶ月であることが多い。
- 所有者情報(サブジェクト):DNという表記で示す。DNは情報を階層的に表現
- 公開鍵
所有者情報に記載するCN(サーバーの名称)については、サーバー証明書の他にも、
近年はワイルドカード証明書やマルチドメイン証明書も存在します。
サーバー証明書 | サーバーの名称(FQDN)を設定する https://www.datascience-lab.ne.jp |
ワイルドカード証明書 | 変化する部分をワイルドカードにして設定する https://*.datascience-lab.ne.jp |
マルチドメイン証明書 | 登録しておきたい所有者名の別名をsubjectAltName(SAN)に指定する。 https://www.datascience-lab.ne.jp https://www.datascience-lab.company.ne.jp https://www.datascience-lab.study.ne.jp |
SANに記載がある場合、サブジェクトには無記入であることもありえます。
サーバ証明書の種類
サーバ証明書のグレードが存在します。
どのレベルまで証明できるのかによって、グレードがわかれています。
DV証明書:ドメイン認証型
ドメインの所有を証明します。
DV証明書の中に、サブジェクト(CNのみ)と公開鍵が入っています。
どこかの誰かが、このドメインを持っていると証明できます。
HTTPS通信の場合、サーバー証明書が必須なため、DV証明書は手軽にサーバー証明書を発行したいときに使います。
フィッシングサイトなどは、似たようなドメインがたくさんありますが、組織の真正性を確認できないDV証明書を使われています。
DV証明書は、無料でも発行可能です。
OV証明書:組織認証型
証明書のサブジェクトには、CN・Oが記載されています。
ドメインの持ち主となる組織名が記載されているため、CAが組織の実在性を保証します。
EV証明書:EV認証型
組織の実在性の確認に加え、組織に属する人間からの申請であるかまでCAが確認します。
更に、業務実態も調査します。
金銭の取引を行う場合は、EV証明書が望ましいです
DV、OV証明書はワイルドカードを使えるのに対し、EV証明書はワイルドカード証明書にできません。
公開鍵証明書の検証
公開鍵証明書を受け取ったら、検証します。
途中で公開鍵証明書が改ざんされていないかを確認するために、証明書の中にある公開鍵を用いて、CAの署名を検証します。
公開鍵証明書とCAの公開鍵をハッシュ関数にかけることで署名ができているので、
もし公開鍵証明書が改ざんされていたら、CAの署名の検証に失敗します。
公開鍵証明書の検証でやるべきことは、他にもあります。
- 有効期限内の証明書か
- 失効していないか
- 証明書のCN,SANの名称と合致するか(アクセスしたサーバと情報が同じなのか)
公開鍵証明書の失効
失効とは、有効期限内であり、かつ、使えない(使わない)証明書である状態を指します。
失効した証明書は、失効リスト(CRL)にシリアル番号を掲載されます。
シリアル番号は認証局ごとに発行している番号です。
CRLをもCAごとに発行します。
有効期限が切れた証明書については、CRLから削除されます。
失効情報を問い合せるプロトコルがOCSPです。
OCSPはオンラインで(リアルタイムに)失効情報を問い合わせられます。
OCSPレスポンダにシリアル番号を送ります。
Webサーバが、ブラウザとの通信の前に、OCSPレスポンダに失効リストを問い合わせておくことで、確認時間を短縮させる方式を、OCSPステープリングと言います。
CA:認証局
パブリックCAとプライベートCAがあります。
- プライベートCA:自組織で運営するCA。内部でだけ通用する証明書を発行します。自分でブラウザ/OSに証明書を登録
- パブリックCA:公的に運営されるCA。
登録局:申請を受付、内容を確認する
発行局:署名をつける
リポジトリ:発行した証明書の管理
公開鍵証明書発行の手続き
- 申請者が公開鍵を作成
- サブジェクトに記載する
- CSRに①②をまとめる
- CA(登録局)へCSRを申請する
公開鍵証明書についているCAの署名を検証するために、CAの公開鍵が必要です。
しかし、CA、特にパブリックCAは相当数あり、変化も激しいため、すべての認証局の公開鍵をブラウザが所有しているのは事実上不可能です。
そのため、ルートCAを頂上とした、CAの階層構造を構築することで、ルートCAの公開鍵を登録しておけば配下のCAの証明書の署名を検証できるようにしておきます。
上位のCAが下位のCAの公開鍵証明書を発行します。
ルートCAからサーバの署名をしているCAまでのパスを認証パスといいます。
ルート証明書は、ルートCAからの署名とルートCAの公開鍵を入れるため、
自己署名証明書といえます。
自分で自分を証明しているから、第三者が内容を保証しているわけではないです