文章内容更新请以 WGrape GitHub博客 : 图解HTTPS核心原理 为准
前言
本文原创,著作权归WGrape所有,未经授权,严禁转载
阅读指南
阅读此篇文章,你能从中学到什么 ?
- HTTP的安全性问题
- 对称加密和非对称加密
- HTTPS实现原理
一、从HTTP协议说起
1、协议介绍
HTTP协议是客户端和服务端进行数据传输的应用层协议,客户端把请求数据封装为请求报文,发送至服务器,服务器再把响应数据封装在响应报文中,返回至客户端。
2、安全性问题
由于HTTP协议未使用任何加密,采用明文传输的方式,这意味着在数据传输过程中,任意一个网络设备都可以识别并篡改数据内容。
举个例子,在小明与小红分手后,小明向小红发送了一条内容为miss you
的消息,但不巧的是,这条消息被骇客截获并识别出消息内容后,偷偷地篡改为hate you
,导致小明失去了一次挽回小红的机会。
3、如何提高安全
为了提高数据传输过程的安全性,需要提供完整数据加密的支持。而在客户端和服务器通信前,又必须有一种机制可以使双方决定秘钥,在使用一致的秘钥后,才得以开始正常通信。这就是HTTPS需要解决的问题。
二、图解HTTPS工作过程
对于上述HTTP在出传输过程中存在的问题,可以使用如下解决方案
1、加密传输
小明和小红在分手前约定了一个聊天规则,信息中的每个字母都要按照字母表中的顺序后移三位,比如 A -> D ,B -> E
。在分手后,小明想要发送的miss you
消息,就变成了Plvv brx
。这时即使信息被骇客截获,但由于无法识别内容,无法进行修改,所以只能原样传输给小红,小红拿到消息后按照约定的规则,得出了真正的信息miss you
。
骇客原则上可以任意更新任何接收到的消息,但问题就在于,如果无法正确识别内容,也随意修改数据,就会导致传输过程中出错,骇客的身份也就会被暴露无遗。
这种传输时使用的加密方式,称为对称加密(对称秘钥加密),即双方使用的秘钥完全一致。
2、如何决定秘钥
上述对称加密传输方案是建立在双方已知秘钥的前提下,但是小明与小红第一次见面的时候,他们还没有确定的秘钥,所以需要先实现一个安全的确立秘钥的方式。
(1) 信中传递秘钥
如果他们在信中传递秘钥,那么秘钥就会完整被骇客截获,监听并篡改二人的聊天信息。
(2) 传递未上锁的盒子
小明向小红传递一个未上锁的盒子,小红接收后把秘钥放到盒子中并上锁后回传给小明,即使过程中骇客截获盒子,也没有锁打开盒子,所以无法截获正确的秘钥。
这种方式称为非对称密钥加密。之所以称之为非对称,是因为你即使把信息编码(锁上的盒子)也不能破译信息(打开锁住的盒子)。在术语中,盒子被称为公匙,用来打开盒子的钥匙被称为私匙
3、如何信任盒子
(1) 盒子可以被篡改
在小明向小红传递未上锁盒子的过程中,盒子可能会被骇客截获,这样还是会有被监听和篡改的风险。
(2) 让信任机构给盒子签名
如何让小红正确识别出盒子是小明的呢,小明想到了一个让信任机构给盒子签名的方式,这时小红接收到箱子时只要看到这个签名,就能相信这确实是来自于小明的合法盒子了。
那么什么是信任机构呢,就是它是一个只会给合法人签名的非常值得信赖的机构。所以只要能有对方的签名,就能完全相信这是一个合法的来自对方的盒子了。
4、对称加密和非对称加密
由于对称加密和非对称加密各有优劣,所以可以采用对称加密和非对称加密结合的方式。
- 非对称加密 :双方先传递未上锁且被信任机构签名的盒子,然后把秘钥放入盒子中,从而建立秘钥
- 对称加密 :在建立秘钥之后,双方直接传输被加密后的信息
5、完整过程
双方先通过非对称加密的方式,建立可信任的秘钥,然后再使用对称加密的方式,传输数据。
- 请求网站
- 生成公钥和私钥
- 响应公钥
- 验证是否https,生成随机key,复制密钥
- 隐藏传输随机key
- 使用私钥,获取key,使用key隐藏内容
- 使用客户端key响应加密内容
- 使用key解密内容
三、HTTPS核心原理
1、使用的协议
HTTPS主要基于SSL/TLS
协议
2、加密过程
先使用非对称加密的方式,建立秘钥,然后再使用对称加密的方式加密信息,最后使用散列算法验证信息的完整性,以确保接收到的信息正确无误。
四、附录
- 建立秘钥 :达到只有双方知道秘钥的过程