HTTPS协议原理
- 一.前言-为何要有https协议
- 二.加密与中间方劫持
- 1.什么是加密
- 2.为何要加密
- 3.对称加密
- 1.小例子
- 2.好处和缺点
- 4.非对称加密
- 5.数据指纹/数据摘要
- 三.站在设计者的角度提出方案
- 1.只使用非对称加密 : 且只有server有密钥
- 2.只使用非对称加密 : 且双方都有密钥
- 3.非对称+对称 : client一个对称,server一对非对称
- 4.如何解决中间人攻击问题
- 四.CA证书
- 1.介绍
- 2.CA证书如何防止中间人攻击
一.前言-为何要有https协议
http协议在功能方面已经非常完善了,只不过安全性没有保障,因为数据都是明文传输的
get方法直接将数据以url参数的方式进行传递,post方法将数据以请求体的方式进行传递
虽然post比get安全那么一点,但是只要数据是明文传递的,那就一定不安全(隐私泄漏,数据被篡改等等安全问题)
所以大佬们在http协议之上引入了一个加密层,设计出了https协议
二.加密与中间方劫持
1.什么是加密
加密就是把 明文(要传输的信息)经过一系列变换,转换成密文
解密就是把 密文经过一系列变换,转换成明文
在这个加密和解密的过程中需要一些数据来辅助进行,这些数据被称为密钥
加密和解密涉及到密码学的范畴,我们只需要知道总是有很多方法对数据进行加密解密的,至于怎么加密和解密,有密码学的大佬负责研究
2.为何要加密
因为只要数据是明文传递的,那就一定不安全(隐私泄漏,数据被篡改等等安全问题)
在数据传输过程中,有中间方会进行劫持,窃取隐私信息或者篡改内容等等(至于中间方是谁? 技术既能向善又能向恶,都是被金钱蒙蔽了双眼…)
(想象一下,如果你在使用支付宝进行支付操作时,你的用户账号,密码和支付密码被中间方盗取了…当然这种情况现在不会发生了,因为有了https,人脸识别,指纹识别等等技术)
3.对称加密
对称加密是指:
加密和解密所用的密钥是相同的
特点: 加密解密计算量小,速度快
1.小例子
比如: 利用按位异或的可交换性和抵消性就可以搞一个对称加密
小明和小红要进行通信,它们都持有密钥key=1234
小明发送一个"hello",这个"hello"的每个字符都跟key进行按位异或(也就是加密),然后才发给小红
小红收到数据之后再将数据的每个字符跟key进行按位异或(也就是解密),转换回了"hello"
这个密钥key就是对称密钥,在这期间即使数据被中间方劫持了,中间方也不知道你们的密钥是什么
(不考虑中间方恶意穷举破解密钥,因为有可能获取到的非法利益还不够破解密钥的成本呢…)
因此它也就无法获取隐私信息或者篡改信息
(因为你改消息是为了误导接收方,获取非法利益,你都不知道接收方解密用的密钥是什么,你怎么误导他?? 所以篡改信息没意义)
2.好处和缺点
使用对称加密,理论上来说已经能够解决数据安全性的问题,但是在实践上,单纯只靠对称加密是行不通的
小结一下: 如果只采用对称加密,实践当中为何不能解决数据安全性问题
- 所有的用户的对称密钥都是一样的
中间方也能够得知对称密钥,此时加密解密就形同虚设了,因此行不通 - 所有用户的对称密钥都不同
对称密钥的交换缺少安全性,中间方能够进行拦截获取对称密钥,此时加密解密就形同虚设了,而且还会增加服务器维护密钥的成本,因此行不通 - 对用户通过源IP地址和源端口号进行划分,分配并使用不同的对称密钥
无法保证跟中间方密钥相同的用户的数据安全,而且如果中间方扩大影响力,获取多个密钥,那危害也是很大的,因此行不通
总和起来,都是因为
- 密钥进行交换/协商时,无法保证自身的安全性
- 对称密钥既能对数据进行加密,又能对数据进行解密,一旦被中间方获取,那么双方通信时的加密就形同虚设了
4.非对称加密
非对称加密:需要通过两个密钥来进行加密和解密
一个密钥被称为公钥,另一个被称为私钥
加密解密时有两种使用方式:
- 公钥加密,私钥解密
- 私钥加密,公钥解密
特点: 算法复杂,加密解密效率低
稍后我们再来分析使用非对称加密能解决数据安全性问题吗,现在我们先介绍其他很重要的知识
5.数据指纹/数据摘要
三.站在设计者的角度提出方案
下面我们站在https协议设计者那些大佬的角度来思考一下如何对数据进行加密,解密
刚才我们已经看出只使用对称加密是不行的,那么我们只使用非对称加密呢?
1.只使用非对称加密 : 且只有server有密钥
其实如果考虑中间方欺骗client和server的话,从client到server也是不安全的
因此这种方案果断pass
2.只使用非对称加密 : 且双方都有密钥
欺负我client没有密钥…那我们给client也配上密钥
我们依然先不考虑中间方欺骗client和server,
刚才server -> client不安全是因为server发送数据使用私钥S’加密,但是中间方有公钥S,
因此server发送数据一定不能用自己的私钥S’加密,而要用client的公钥/私钥来加密
中间方搞事情:
这个方案还有一个问题
全都用非对称加密,效率太低了!!!
而且你看,client都能把公钥C"安全"的发给server了,也就是说公钥C这个密钥非常"安全"
而对称密钥缺的不就是安全嘛,人家还非常快,因此把C换成对称密钥不好吗,双方通信时都用对称密钥
因此下一个版本
3.非对称+对称 : client一个对称,server一对非对称
但是中间方依旧能搞事情
4.如何解决中间人攻击问题
经过三个版本,我们发现,中间方能搞事情的原因都是因为:
client被骗了,他认为自己受到的公钥M就是server发送的公钥S
也就是说client无法判断收到的公钥的合法性
现实生活当中,如何区分假钱和真钱? -> 验钞机 , 验钞机具体如何区分呢? 根据: 磁性、尺寸、厚度等特征 -> 这些特征谁规定和保证的? -> 国家相关组织
因此我们这里也有相关组织: CA机构(Certificate Authority,证书授权机构)专门解决这一问题
四.CA证书
1.介绍
在server使用HTTPS之前需要向CA机构申请CA证书,CA证书里面含有证书申请者信息,公钥信息等等
client访问server时默认会检查该网站的CA证书,
如果CA证书过期了,或者不可靠等等,浏览器就会给我们安全警报,我们看到之后就会关闭该网页
如果CA证书有效,那么浏览器就会从CA证书里面获取公钥
CA证书就相当于server的合法证书,证明server公钥是正确安全的
整个流程:
2.CA证书如何防止中间人攻击
从技术的角度,中间人对CA证书想怎么改就怎么改,掉包都可以,但是你怎么改都没用,掉包就暴露你了,到时候进局子了就
CA证书=企业的明文数据+用CA私钥加密的 用企业明文数据生成的数据指纹
因此HTTPS协议的最终方案是:
CA证书+非对称加密(client用server的公钥加密对称密钥发送给server)+对称加密
既保证安全,又保证了效率
以上就是HTTPS协议原理的全部内容,希望能对大家有所帮助!!