Digital Certificate

Table of Contents

1. Digital Certificate

1.1. 格式

数字证书包含的关键的数据:

  1. issuer

    这个证书是哪个 CA 签发的

  2. subject

    证书签发给谁

  3. subject public key

    被签发人的公钥

  4. signature

    issuer 用自己的 private key 针对上述信息生成的 signature

1.2. 签发过程

  1. subject 提供自己的标识和 subject public key, 交给 CA
  2. CA 把自己的标识 (issuer), subject 的标识 (包括名字, 网址等) 以及 subject publick key 打包后用 CA 的 private key 生成签名, 附在打包数据的后面, 构成完整的证书

1.3. https 认证过程

  1. client 要和 subject 的网址通信, 先从 subject 的网址获到证书
  2. 从证书取出 issuer, 查看是否是本机预置的 CA, 如果不是, 则失败
  3. 从预置的 CA 证书中取出 issuer 对应的 public key
  4. 用 issuer public key 验证签名是否有效, 如果无效, 则失败
  5. 从证书中取出 subject 标识和 subject public key, 如果当前访问的网址和 subject 标识不一致, 则失败
  6. 使用 subject public key 和 subject 网站交换一个 AES 密钥, 后续通信都使用这个密钥

1.4. self signed cert

self signed 证书是指 issuer 和 subject 相同, 且证书中的 subject public key 是 issuer 的 public key.

self signed 证书有两个用处:

  1. CA

    CA 的证书都是 self signed, 这种证书需要预置到本机

  2. 通信双方是已知的

    这时 client 也需要提前信任这个证书, 例如把证书的签名存在本地. 下次碰到这个证书时发现签名是匹配的, 则使用用证书中的 subject public key 做 issuer public key 走前面 https 过程的第 4 步 (验证签名)

1.5. 证书链

一个证书未必是 root CA 签发的, 但通过证书中的 issuer 标识, 可以形成一个证书链, 证书链的认证过程为:

  1. cert1 的 issuer 是 root CA, 且 subject 是 x, 通过 root CA 的 public key 验证过签名后, 取出 subject public key (即 x 的 public key)
  2. cert2 中的 issuer 为 x, 使用前面验证过的 x 的 public key 来验证 cert2 的签名, 最终获得验证过的 cert2 的 subject public key

Author: [email protected]
Date: 2022-05-25 Wed 15:03
Last updated: 2022-05-25 Wed 15:38

知识共享许可协议