明文通信可能出现中间人攻击导致数据泄露或被篡改。SSL和TLS是一种保护通信的协议。
TLS1.0
是SSL3.0
的升级版。通常被标记为SSL3.1
。所以通常都将两者并称为:SSL/TLS
。以此可推TLS 1.1
对应SSL 3.2
etc…
两者差异并不太大,但是不能互换。查看更多差异
目前应用最广泛的是TLS1.0和SSL3.0。
原理
TLS协议中,客户端与服务端首先使用非对称加密算法通信,用于协商出密钥,之后用协商出的密钥将通信数据做对称加密,然后开始加密通信。
协商过程
1 | 客户端 服务端 |
图来自TLS RFC
- client向server发起请求,提供自己支持的协议版本,加密算法和压缩算法
- server回应client,选择彼此支持的最高版本,确定加密算法和压缩算法
- server发送自己的证书
- client验证server的证书后,使用证书通知server变更secret。
- client通知server开始加密通信
- server用私钥解密获取变更后的secret 然后使用secret 将数据对称加密后发送
- 接下来使用对称加密通信
一些细节
server的证书
我们要确保server发来的证书确定是其本人,而不是中间人。
server发来证书时,证书会标识其由哪个CA签发,我们根据CA的公钥可以验证该证书是否由CA签发。
可以通过根CA验证
通知server变更key
常见的有两种方法:RSA和匿名Diffie-Hellman。
首先client与server在发送clientHello和serverHello中曾各生成1个随机数
RSA:
- client验证server证书后,用证书加密一个随机数(Premaster secret),发给server
- server使用私钥解密获得Premaster secret
- 双方使用 Premaster secret + hello信息中的两个随机数 生成secret
Diffie-Hellman:
- server回复serverHello后,生成一个
Server DH Parameter
并用私钥加密后发给client - client使用server证书中的公钥解密获得
Server DH Parameter
- client将生成的
Client DH Parameter
发送给server - client和server使用交换的DH参数生成 secret
https
https是http协议基于TLS的一种应用场景,其他协议也可以使用。
- FTP
- POP
- SMTP