https原理
https和http的区别是在http到tcp层中,多加了一个ssl/tls层,用来对数据进行加密。
一、为什么需要加密?
我们思考一下,在网络环境中,为什么需要加密?因为存在攻击。网络环境是不安全的,开放的,任何人都能拿到你在现行计算机网络通道中的消息,那我们肯定是不希望我们自己的消息被别人拿到看到。所以需要做一个加密的功能。
在实现这个功能之前,我们先思考一下,我们具体的在互联网中不安全的情况有几种?
窃听、篡改、冒充
这三个基本上是我们在使用计算机网络传输信息的时候不希望出现的情况,这对于理解目前的HTTPS技术非常重要,因为每个环节都是为了解决这三个问题的。
二、HTTPS技术流程
- 加密(防窃听)
- 数字签名(防篡改)
- 数字证书(防冒充)
下面我们一个一个来看这三部分是如何实现的。
1)加密
最传统的加密手段是对称加密,就是把信息放盒子里,用钥匙和锁把他锁住,然后把钥匙,锁和盒子一起寄给人家。
但是你想想,这能避免上面所说的三种攻击情况吗?显然是不能的…毕竟钥匙都给人家了
1. 非对称加密
所以,我们用的是非对称加密。
什么是非对称加密?就是一把锁有两个钥匙,而且这两把钥匙是不一样的,并且用钥匙A锁住的锁,必须用钥匙B才能解开。
就是所谓的公私钥,公钥可以给别人看,别人发给你的信息用公钥加密,只能拿你的私钥解密,但是你不给人家你的私钥,别人就看不了信息啦。
但是要注意的是,公私钥两个原则上是并不区分的,但是由于具体实现过程中,我们通常用公钥来进行加密信息,私钥来进行解密信息,感兴趣的自行百度。
2. 非对称加密的缺点
诶,那我们思考一下,在网站上的应用,浏览器和服务器都是要互相发送消息的,那咋办?
emm,很简单嘛,浏览器自己也做一个密钥对,把公钥暴露出去,私钥保管好不就可以了吗。
确实是,但是具体实现上却不是这样的,为什么呢?
因为非对称加密算法如rsa等,实在是太难了…耗费资源太多了
我们知道,加密的最关键的是加大解密者的难度,让人家知难而退,或者要花很大代价才能解密。
就像小木盒和保险箱哪个更安全?肯定是保险箱啊,但是保险箱就不能被破解吗?不是,他只是比较难被破解。
但是这个难也是双向的,别人难破解你也难用啊!
你出门把钱放小木盒里可以,但是你很怕被偷,你要放大保险箱里,那你背的出门吗?
非对称加密也是如此
那咋办?
3. web实现加密办法(非对称加密结合对称加密)
很巧妙。我们思考一下,我把装消息的盒子,以及钥匙都寄给人家,人家一拿我的钥匙就开了锁对不对?那我寄过去的时候,拿一个小保险箱,把钥匙锁住!
https就是用的这种方案,结合对称加密和非对称加密。
流程如下
server -> 发送公钥 PK -> client
client -> 生成一个对称加密的密钥PX -> 用PK加密PX -> X
client -> 发送加密后的 X -> server
server -> 使用私钥K解密 X -> PX
从此以后,对称加密的密钥PX就悄咪咪的放在服务端和浏览器端两个人手里的,每次他们传数据就用这个进行加密,但是别人又拿不到密钥哈哈哈
好,加密的过程大概是这样子,那让我们想一想,这个过程,还有没有什么漏洞?
大家记不记得历史上,秦朝的赵高发假圣旨,“赐死”太子扶苏的事件?
对!有人冒充发消息怎么办?有人冒充我,发消息给人家,但是人家也不知道发过去的公钥到底是不是我的啊!
在互联网上,就需要第三方来做代表了!这个就是数字证书
2)数字证书(防冒充)
这个第三方机构,就是CA机构,它专门给别人发一个数字证书,别人看到这个证书就知道这个是真人了。
就像盖公章一样,但是有没有一个可能,公章被人冒充了呢?
也有解决办法,证书放有CA的私钥加密的内容以及附带解密的公钥,倘若别人拿这个公钥解密证书后,得到的内容和CA机构给的代码不一致,那就是说是假的!冒充的!
这就是数字签名方法,该方法也用于实现内容防篡改。
3)数字签名
数字签名其实就两个内容
- 发送方对数据通过签名密钥生成一个签名
- 接收方通过公钥对内容验证,得出一串东东,只要和发送方给出的验证代码一致,那就某问题啦
上述的非对称加密逻辑,实际上最重要的是加密算法,这个加密算法真的太无敌了,能生产一个独一无二的数据,我在这里不赘述太多,期待以后有机会学习再与大家分享。