签发证书的步骤:
- Signing阶段,首先撰写证书的元信息:签发人、地址、签发时间、过期失效等等;
- 通过通用的hash算法将信息摘要提取出来;
- Hash摘要通过签发者的私钥进行非对称加密,生成一个签名密文;
- 将签名密文attach到文件证书上,使之变成一个签名过的证书。
验证证书的步骤:
- Verification阶段,浏览器获得之前签发的证书;
- 将其解压后分别获得“元数据”和“签名密文”;
- 将同样的Hash算法应用到“元数据”获取摘要;
- 将密文通过公钥(非对称算法,私钥加密,公钥解密)解密获得同样的摘要值。
- 在这里的签名密文是一个重要凭证,Signature与签发人的公钥一同传输,可以避免中间人在获取证书时对证书内容的篡改。
通过CA,可以保证server提供的公钥(public key)不被proxy篡改,否则签发“元信息”不满足信任链(Chain of trust),会被浏览器识别为“不安全”的。
有关信任链的验证流程,可以参考下图: