Digital Certificate
Table of Contents
1. Digital Certificate
1.1. 格式
数字证书包含的关键的数据:
issuer
这个证书是哪个 CA 签发的
subject
证书签发给谁
subject public key
被签发人的公钥
signature
issuer 用自己的 private key 针对上述信息生成的 signature
1.2. 签发过程
- subject 提供自己的标识和 subject public key, 交给 CA
- CA 把自己的标识 (issuer), subject 的标识 (包括名字, 网址等) 以及 subject publick key 打包后用 CA 的 private key 生成签名, 附在打包数据的后面, 构成完整的证书
1.3. https 认证过程
- client 要和 subject 的网址通信, 先从 subject 的网址获到证书
- 从证书取出 issuer, 查看是否是本机预置的 CA, 如果不是, 则失败
- 从预置的 CA 证书中取出 issuer 对应的 public key
- 用 issuer public key 验证签名是否有效, 如果无效, 则失败
- 从证书中取出 subject 标识和 subject public key, 如果当前访问的网址和 subject 标识不一致, 则失败
- 使用 subject public key 和 subject 网站交换一个 AES 密钥, 后续通信都使用这个密钥
1.4. self signed cert
self signed 证书是指 issuer 和 subject 相同, 且证书中的 subject public key 是 issuer 的 public key.
self signed 证书有两个用处:
CA
CA 的证书都是 self signed, 这种证书需要预置到本机
通信双方是已知的
这时 client 也需要提前信任这个证书, 例如把证书的签名存在本地. 下次碰到这个证书时发现签名是匹配的, 则使用用证书中的 subject public key 做 issuer public key 走前面 https 过程的第 4 步 (验证签名)
1.5. 证书链
一个证书未必是 root CA 签发的, 但通过证书中的 issuer 标识, 可以形成一个证书链, 证书链的认证过程为:
- cert1 的 issuer 是 root CA, 且 subject 是 x, 通过 root CA 的 public key 验证过签名后, 取出 subject public key (即 x 的 public key)
- cert2 中的 issuer 为 x, 使用前面验证过的 x 的 public key 来验证 cert2 的签名, 最终获得验证过的 cert2 的 subject public key