看了很多文章,发现https加密传输原理讲的都不是很简洁清晰,搜索的人往往看半天还得不到心中需要的答案,这里就自己的理解简要的说一下原理,讲的不对的地方敬请批评指出
简要步骤:
- 服务端将申请的证书信息下发给客户端,证书中带有非对称加密的公钥
- 客户端首先验证该证书(见下面),没问题后使用证书提供的公钥加密一串用于作为对称加密密钥的数据S,将加密后的数据传给服务器
- 服务器使用非对称加密的私钥解密获取S,由此客户端和服务端得到了一个安全的对称加密的密钥S,双方后续用S对数据进行加密传输
注: https加密传输既使用了对称加密,又使用了非对称加密。非对称加密的目的是为了保证对称加密密钥的安全性,传输数据使用对称加密是因为对称加密速度更快
证书验证过程
- 服务端先找证书签发机构购买证书,证书上的公钥、域名、有效期等信息会被计算一次hash,然后证书机构用它的私钥对这个hash值再进行一次加密,这个加密结果就是证书的签名
- 服务端接收客户端请求后会将证书以及签名下发给客户端
- 客户端查找操作系统内置根证书(包含公钥),找到下发证书上签发机构对应的公钥,用这个公钥去解开签名,成功解开并对比证书上的信息与实际服务器信息无误,则验证成功,可以信任