参考链接
互联网的通信安全,建立在SSL/TLS协议之上
基本思路
非对称加密
- 客户端先向服务器端索要公钥,然后用公钥加密信息
- 服务器收到密文后,用自己的私钥解密
Q1:保证公钥不被篡改?
A1:将公钥放在 数字证书 中(只要证书是可信的,公钥就是可信的)
Q2:公钥加密计算量太大,减少耗用的时间?
A2:
每一次对话(session),客户端和服务器端都生成一个"对话密钥(session key),用它来加密信息
- "对话密钥"是 对称加密,所以运算速度非常快
- 服务器公钥只用于加密"对话密钥"本身,这样就减少了加密运算的消耗时间
基本过程
(1) 客户端向服务器端索要并验证公钥。
(2) 双方协商生成"对话密钥"。
(3) 双方采用"对话密钥"进行加密通信。
握手阶段
:(1、2)【handshake】:开始加密通信之前,客户端和服务器首先必须 建立连接和交换参数
第一步,客户端给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法
第二步,服务器确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random)
第三步,客户端确认数字证书有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给服务器
第四步,服务器使用自己的私钥,获取客户端发来的随机数(即Premaster secret)
第五步,客户端和服务器根据约定的加密方法,使用前面的三个随机数,生成"对话密钥"(session key),用来加密接下来的整个对话过程
客户端发出加密通信的请求(ClientHello)
通常一台服务器只能有一张数字证书
服务器回应(SeverHello)
如果服务器需要确认客户端的身份,就会再包含一项请求,要求客户端提供"客户端证书"
- 比如,金融机构往往只允许认证客户连入自己的网络,就会向正式客户提供USB密钥,里面就包含了一张客户端证书。
客户端回应
首先验证服务器证书
- 如果有问题,则警告并发出询问是否继续
客户端从证书中取出服务器的公钥
👆 三个随机数,生成"对话密钥"(session key):
客户端生成的随机数(Client random)
服务器生成的随机数(Server random)
客户端生成新的随机数(Premaster secret)