数字证书:
- 需要使用
CA
来解决公钥的信任问题(客户端可能收到第三方的公钥)。- 服务端在发送之前需要先把用来给客户端加密的公钥放到
CA
中,CA
根据公钥以及其他信息生成了数字证书,数字证书就相当于把这把公钥和该网站绑定起来了。然后客户端就可以使用数字证书中的公钥生成会话密钥了。- 但是怎么才能相信数字证书就是由
CA
颁发的呢?只要数字证书上有CA
的签名就可以了。
数字签名:
- 当
CA
收到网站的信息以及公钥以后,会对这些信息以及公钥进行哈希运算,得到一串较短的哈希字符(会用于后续的加密和解密)。相当于对全部内容的一个总结。- 在哈希运算以后,
CA
也生成一对专门用于数字证书的公钥和私钥,然后使用私钥给哈希字符加密,加密后的字符就是数字签名。- 接着就可以将数字证书发给服务端了。
- 为了证明没有被中间人更改过公钥,客户端需要使用
CA
签名时生成的公钥,并且使用这把公钥给数字证书里面的数字签名解密。接着对接收到的数字证书的内容进行同样的哈希运算,如果前后两段哈希字符相同则说明数字证书是靠谱的。- 假设中间人修改了数字证书的内容,但是因为中间人没有原本生成数字签名的私钥,因此收到的数字签名会和数字证书不匹配。
- 一对公私密钥,加密和解密是相对的。数字签名是使用私钥先加密,公钥解密。
证书链:
CA
会将生成数字签名时候的这把公钥放在自己的数字证书(需要数字证书来证明自己的身份)中,这份数字证书同样需要一个私钥来进行数字签名。- 根
CA
需要生成一对专用的公钥和私钥,既然根CA
有这把公钥说明根CA
也有自己的证书,根CA
使用私钥为自己的证书签名,然后在用户的操作系统和浏览器里面预先安装根CA
的证书。这样就完成了闭合。
统和浏览器里面预先安装根 CA
的证书。这样就完成了闭合。