概要
など色々なファイルや用語があり、混乱しやすいのでまとめます。
認証局(CA)について
ルートCA
認証局です。
この認証局が発行するルート証明書は自身が署名します。
いわゆるオレオレ証明書になります。
一般的には社会的に信用された企業がルート認証局となります。
ブラウザなどTLSのクライアントサイドは一般的なルート証明書をデフォルトで持っています。
中間CA
ルート認証局に認められた認証局です。
中間CAがあることで運用上の手続きがスムーズになったり、問題が起きた時のrevokeがしやすいといったセキュリティ的なメリットなどがあります。
詳しくは以下のサイトで説明されてます。
中間証明書の必要性、証明機関(認証局)の階層化の理由 | SEの道標
証明書について
ルート証明書・中間証明書・サーバ証明書の関係
こちらのサイトの図が非常に分かりやすいです。
ref: プライベートルート証明書・中間証明書・サーバ証明書の作り方 - Apache 2.4系でHTTP/2対応サーバを構築してみるテスト。
ルート証明書・中間証明書・サーバ証明書の区別の方法は?
$ openssl x509 -in xxx.crt -text -noout
してみると以下の特徴があります。
証明書 | 特徴 |
---|---|
ルート証明書 | 自己証明書なのでIssuer とSubject のCN が同じ |
中間証明書 | Issuer CN がルート認証局Subject CN が中間認証局CRL がルート認証局のもの |
サーバ証明書 | Issuer CN が中間認証局Subject CN がドメイン名CRL が中間認証局のもの |
各証明書等のインストール先
各証明書のインストール先は以下です。
証明書 | インストール先 |
---|---|
ルート証明書 | クライアント |
中間証明書 | サーバ |
サーバ証明書 | サーバ |
サーバ証明書の秘密鍵 | サーバ |
証明書から公開鍵を取り出す方法は?
$ openssl x509 -in xxx.crt -pubkey -noout
で以下のように出力されます。-noout
を付けないと読み込んだ証明書も出力されます。
-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6JcBiE1tzJ73/6bjJAbR ariOuOAcF86nywXhnR1CnWRXwHrJw7jbJzC3oLkOwVKMkEHYH+Y38xlKNF09DMMD uW4d+5tAQmcVRw6EzxjiplZRMMEB9CRf7+gFv57SpqlFi4FwprhywHxEQNwPsPfj Fk2Artb99sr3GWKa+37YOAAUFStY+NWqsWLU33m7DVHoKWdIwRtwvwCdHpo2NuaP nvW8OpFN3JmEp5xJZ4oIGztnq+vxPlZhtxXHkT5R8SZPI2+lqTJIU9bsw9GLcvid BMffHBPq1De1CjvvUpEzKLBiDrcGucENe0ZOGPOTxJK++KbZ4UE1BJ518X6qFLz3 8QIDAQAB -----END PUBLIC KEY-----
証明書の検証フロー
と言う感じですね。
TLS接続の確立フロー
ref: https://cspssl.jp/guide/mechanism.php
- クライアントがサーバに接続要求
- サーバはクライアントに中間証明書・サーバ証明書を渡す
- 前述の検証フローで正しいサーバ証明書と分かる
- クライアント側で暗号通信用の共通鍵を用意
- サーバ証明書にある公開鍵を使って、共通鍵を暗号化してサーバに渡す
- 暗号化された共通鍵を、サーバ証明書を作った時の秘密鍵で復号
- 共通鍵をクライアント・サーバで保持できたので暗号化通信が可能
と言う感じです。
まとめ
TLSで必要な用語やフローを説明しました。