为什么要用 HTTPS ?
安全性
http 是一个简单的请求-响应协议,特点是无状态和明文传输、而https,实际上是 http 加上 SSL / TLS 协议组合形成的一种加密传输协议。如果网站采用 http 协议,因为该协议不加密,极容易遭遇中间人攻击,用户的个人隐私和一些敏感数据很容易泄露。https 则因为 ssl 协议的存在,会对网站与客户端之前传输的数据进行加密,增加中间人破解成本,但是 HTTPS 不是一定安全的。
举个例子:你主动去点击中间人服务器的不安全证书,用户接受了中间人的伪造的证书,那么 CA 就无用了,中间人可以伪造服务端发送的公钥,从而让截取信息。
如存在以下图片情况的问题:
响应速度
HTTP 的响应速度更快,HTTP 需要三次握手,而 HTTPS 还要加上 SSL / TLS 的握手时间,明显增加了不少。
端口
HTTP 是 80 端口,而 HTTPS 是 443 端口。
HTTPS 的核心 - SSL / TLS 协议
SSL 指安全套接字协议( Secure Sockets Layer ),首次发布与 1996 年。经过漏洞修复、版本更新,SSL 从 3.0 版本才算正式发布,前两个版本漏洞过多,SSL 3.0 升级后变成 TLS 1.0,通常把 HTTPS 中的核心加密协议混称为 SSL/TLS。
SSL / TLS 的工作原理
SSL/TLS 的核心要素是非对称加密。非对称加密采用两个密钥,一个公钥,一个私钥。
公钥:加密、认证。
私钥:解密,签名。
非对称加密小总结
1)适合在不可信的环境中安全通信,数据传输。
2)算法复杂,安全性相对于对称加密更高。
3)由于加密速度较慢,不适合大数据量加密和解密,因此后文的 HTTPS 一次非对称加密和多次对称加密的原因由此而来。
常见的非对称加密算法
1)RSA
使用场景:简单易用,用于数据加密和数字签名,应用最广泛的非对称加密算法。
缺点:运算速度慢,不适合大数据量加密
建议用 2048 位或以上的密钥长度,否则破解可能性较大。
2)DSA
使用场景:适合生成数字证书
优点:数字签名速度生成快
缺点:不能应该能有数据加密,而且签名过程需要随机数的保证。
3)ECC
常见的对称加密算法
1)DES
使用 64 位的密钥(有效密钥为 56 位,8 位奇偶校验位)和 64 位的明文进行加密,安全性不够,在短时间内即可被破解。
2)3DES
向 AES 过渡的加密算法,采用加密->解密->加密的方法,当三个密钥均相同,即可实现一次加密,目的是为了兼容 DES,安全性提升,但处理速度不高,因此有了后面的 AES。
3)AES
全称:Advanced Encryption Standard 先进的对称加密算法。使用 128 位、192 位、256 位的密钥对数据进行加密或解密,安全性更高。AES 在速度上比 3DES 快,安全性也领先 3DES。
HTTPS 的加密过程(重点)
1)Client Hello:信息包括:TLS 版本,加密套件,Client 随机数
2)Server Hello:收到 Client Hello,告知 Client 确认 TLS 版本,加密套件,随机数的信息(可以理解为 ACK 模式),然后将自己的 Server 随机数发给 Client,接着发送自己的证书给 Client,证书发送了,而证书里面有公钥,因此公钥也被携带给了 Client。
3)Client 收到证书后,去对照自己的证书信任列表来确认服务器是否可信,并生成一个随机字符串(称为预主密钥),并用收到公钥将其进行加密,将加密后的预主密钥发送给服务器。
4)Server 收到预主密钥后,用自己的私钥(跟公钥是一对,当时和证书一起发送给了客户端,私钥服务端自己留着用于解密)解密预主密钥,获取真正的预主密钥。
5)Client 和 Server 双方使用相同的算法进行通信,双方此时都获得了 Client 随机数、Server 随机数、预主密钥,生成相同的密钥 Key 用于后面通信的对称加密。
6)Client 发送 Finished 消息
7)Server 发送 Finshed 消息
8)成功建立安全连接,使用共同的 Key 对称加密进行通信。
总结:1 次非对称加密,多次对称加密用来通信,正好符合两种算法的使用场景。
举个例子:看浏览器左上的小锁,点连接安全。
详细流程图展示:
其他补充
1)客户端发起 HTTPS 请求:客户端(一般是浏览器)向服务器发起 HTTPS 请求,请求中包含一个随机数(ClientRandom),该随机数用于后续生成对称加密密钥。
2)服务器发送证书:服务器收到请求后,会向客户端发送自己的数字证书。证书中包含服务器的公钥,并由可信的证书颁发机构(CA)签名,用于验证证书的真实性。
3)客户端验证证书:客户端收到服务器的证书后,会验证证书的有效性。验证包括检查证书是否过期、是否被吊销、是否由受信任的 CA 签名等。
4)客户端生成随机数:客户端生成一个随机数(PreMasterSecret),该随机数用于生成对称加密的会话密钥。
5)客户端使用服务器公钥加密随机数:客户端使用服务器的公钥对生成的随机数进行加密,然后发送给服务器。
6)服务器使用私钥解密随机数:服务器收到客户端发送的加密随机数后,使用自己的私钥进行解密,得到生成的随机数。
7)客户端和服务器生成会话密钥:客户端和服务器使用各自生成的随机数以及 ClientRandom 和 ServerRandom(服务器发送给客户端的另一个随机数)等信息,通过一定的算法生成对称加密的会话密钥。
8)客户端和服务器开始加密通信:客户端和服务器使用会话密钥进行对称加密,保证通信过程中传输的数据的机密性和完整性。