目标
- 安全传输网页信息
整体流程
- 浏览器向服务器发起建立SSL链接请求
- 服务器返回证书,包含一个非对称加密的公钥
- 浏览器首先需要对证书进行验证,确保证书本身的可靠性;然后生成一个【对称加密密钥】,使用证书中的公钥加密后,传输给服务器
- 服务器使用私钥解密,获得【对称加密密钥】,随后浏览器和服务器之间的通信内容都用这个【对称加密密钥】加解密
证书验证流程
- 证书本身有明文数据和签名两部分组成
- 首先将证书的数据用散列函数算出散列值
- 然后用浏览器内置的CA证书公钥的签名进行解密,获得另一组散列值
- 如果两个散列值相同,则证书验证通过
Q&A
- 为什么不直接用对称加密?
- 无法做到跟所有用户提前约定对称加密密钥;如果通过服务端下发密钥,那么又要解决密钥本身的安全问题
- 为什么不直接用非对称加密?
- 非对称加密开销较大,如果每个请求都使用非对称加密,会显著增加服务延时
- 为什么服务端需要传证书给浏览器,而不是不直接传公钥?
- 直接传公钥无法对公钥本身进行验证,如果此时遇到中间人攻击,第三方拦截了这个公钥,然后伪造一个新的公钥,则接下来双方的信息传输全部会被暴露给这个中间人