深入理解HTTPS
什么是 HTTPS
简单来说,是在 HTTP 协议的基础上加一道通道。原因是 HTTP 的通信是明文、不安全的,很可能在你请求的时候被人破解,在你的浏览的页面中加入广告等黑客行为,所以就有人提出了安全协议,即安全版的 HTTP,是使用了 TLS/SSL 加密的 HTTP 协议
如图所示,所谓的 HTTPS 是在应用层加上 TLS/SSL,按照 TCP/IP 分层模型,HTTPS 中的 HTTP 是在 TLS/SSL 的基础上运行,TLS/SSL 负责安全部分,那什么是 TLS/SSL 呢?
TLS/SSL
TLS/SSL 全称安全传输协议 Transport Layer Security,是介于 TCP 和 HTTP 之间的一层安全协议
SSL 是 TLS 的前身,SSL2 和 SSL3 分别在 2011 年和 2015 年被废弃,TLS 可以说是 SSL 的新版本
TLS/SSL 主要依赖于三类基本算法:散列函数、Hash、对称加密和非对称加密,其利用非对称加密实现身份认知和密钥协商,对称加密算法采用协商的密码对数据加密,基于散列函数验证信息的完整性
散列函数Hash
常见的有 MD5、SHA1、SHA256,该类函数特点是函数单向不可逆、对输入非常敏感、输出长度固定,针对数据的任何修改都会改变散列函数的结果,用于防止信息篡改并验证数据的完整性。
非对称加密与对称加密
对称加密很好理解,就是指加密和解密时使用的密钥都是同一个 ,是对称的。只要保证了密钥的安全,那整个通信过程就可以说具有了机密性。
对称加密看上去好像完美地实现了机密性,但其中有一个很大的问题:如何把密钥安全地传递给对方,术语叫密钥交换。
因为在对称加密算法中只要持有密钥就可以解密。如果你和网站约定的密钥在传递途中被黑客窃取,那他就可以在之后随意解密收发的数据,通信过程也就没有机密性可言了。
所以,就出现了非对称加密(也叫公钥加密算法)。
它有两个密钥,一个叫公钥(public key),一个叫私钥(private key)。两个密钥是不同的(不对称),公钥可以公开给任何人使用,而私钥必须严格保密。
公钥和私钥有个特别的单向性,虽然都可以用来加密解密,但公钥加密后只能用私钥解密,反过来,私钥加密后也只能用公钥解密 。
非对称加密可以解决密钥交换的问题。网站秘密保管私钥,在网上任意分发公钥,你想要登录网站只要用公钥加密就行了,密文只能由私钥持有者才能解密。而黑客因为没有私钥,所以就无法破解密文。
TLS/SSL 工作原理
为什么要三种算法结合,非对称加密所耗费时间过长,而对称加密又会不安全,所以结合两种
- 客户端使用非对称加密与服务器进行通信拿到公钥信息(数字证书),实现身份验证
- 由于服务器端私钥加密复杂,耗时较长,所以在客户端身份验证成功以后,会协商对称假面使用的密钥
- 然后对称加密算法采用协商密钥对信息以及信息照耀进行加密通信,不同的阶段采用的对称密码不同,而从可以保证可能通信双方获取
HTTPS 连接大致上可以划分为两个部分,第一个是建立连接时的 非对称加密握手 ,第二个是握手后的 对称加密报文传输