HTTPS相关原理和加密流程(学习入门篇)

版权声明:转载请标明附带连接标明出处 https://blog.csdn.net/Hollake/article/details/90644163

HTTP缺点

https主要有以下缺点

  1. 通信使用明文传输(不加密),内容可能会被窃听。
  2. 通信不验证双方身份,因此可能遭遇伪装。
  3. 无法证明报文的完整性,因此报文可能已经被篡改。

一句话总结就是不够安全,正是由于这些缺点,提出了https来解决这些问题。有兴趣的同学可以访问一个目前还在使用http协议的网站,用Wireshark抓包抓一下,可以验证第一条,http使用明文传输,真的是在网络上裸奔。。。下图就是我访问http://life.hao123.com/health网站后抓包跟踪流,使用utf-8的显示结果,明显可以看到在使用明文进行传输,至于第二点和第三点可以阅读其他相关资料。

HTTP+加密+认证+完整性保护=HTTPS

HTTPS并非是应用层的一种新的协议,只是将HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替(ps:SSL相对于TSL来说是早于TSL,SSL在最初设计的时候就有一些不足之处,所以现在采用比较多的是TSL1.2)。

通常情况下,HTTP直接和TCP通信,当采用HTTPS协议时会先和SSL或者TLS进行通信,然后SSL或者TLS再和TCP通信。在接下来我们对加密,认证,完整性保护逐个进行说明解释。

 加密

HTTPS采用共享秘钥和公开秘钥两者并用的混合加密方式进行加密,一般在秘钥传输阶段,采用公开秘钥加密方式安全的传递稍后在共享秘钥加密中使用的共享秘钥,在确保安全的交换了共享秘钥的前提下,会开始使用共享秘钥加密的传输方式进行通信,看不懂没关系,后面还会提到接下来介绍一下共享密钥加密和公开秘钥加密。

共享秘钥加密

共享秘钥加密也叫作对称秘钥加密,相对于公开密钥加密算法来说,加密简单,加密和解密使用同一个秘钥,但是不安全,为什么不安全呢?这是因为,在双方通信前必须将秘钥安全的传输给对方,如果通信被监听,攻击者成功获得了秘钥,那么就没有安全性可言,换句话说,发送秘钥就有被窃听的风险,如果不发送,对方就无法解密,不知道你发的是什么,而且这种方式如果你能保证秘钥可以安全发送,那数据也就可以安全达到,还加什么密。

公开密钥加密

公开密钥加密也叫作非对称秘钥加密,相对于共享秘钥加密来说,加密复杂,但是就目前的技术来说很安全。公开秘钥加密使用两把秘钥来进行加解密,一把叫做公开密钥,可以随意发布,任何人都可以获取;一把叫做私有秘钥,只能自己拥有,任何人都不能获取。现在举个例子来说明为什么很安全。如图,现在Alice和Bob进行通信,首先Alice通过Bob的公钥B将需要发送的数据进行加密后将加密数据发送给Bob,在Bob拿到加密数据后,Bob会对加密数据用只有自己有的私钥B进行解密,获得传输过来的信息。利用这种方式不需要发送私钥,也不怕通信被监听,因为监听了也没什么用,公钥是公开的,任何人都可以获得,假设现在攻击者获取到公钥后和监听到的密文,想要通过密文和公钥进行解密,就目前的技术而言是基本上不可能实现的。

认证

仔细思考上述公开秘钥加密方式,可以看出Alice是无法验证Bob的公开密钥B的,例如,Alice是想和Bob通信的,他想收到的是公开密钥B,但是当他收到公钥的时候他无法确认这公钥到底是不是Bob的,因为,可能在公开密钥B传输的过程中就已经被攻击者替换成公开密钥C了,但是Alice是完全不知道的,所以这就需要一个权威的中间人提供一些办法来帮助Alice鉴别收到的公钥是不是Bob的,这个中间人就是数字证书认证机构(CA,Certificate Authority)和其相关机构所颁发的公开密钥证书

数字认证机构是权威的第三人,Alice和Bob都信任他。数字认证机构的业务流程是这样的。首先服务器运行人员(这里可以看做是Bob)向数字认证机构提出公开密钥的申请,数字认证机构在对申请者的身份进行判别核实后,会对已申请的公开密钥(公钥B)用机构的私钥进行数字签名,然后分配这个已签名的公开密钥,并将公开密钥放入到公钥证书后绑定在一起(公钥证书也叫作数字证书或者证书)。细心的朋友可能会发现这个流程是数字认证机构处理申请公钥证书的流程,这和Alice和Bob通信没有直接关系啊,别急,接下来就说Alice是如何认证公钥B就一定是Bob的公钥的。

其实在Alice和Bob通信的过程中,Bob向Alice发送的是公钥证书,而不只是单纯的公钥,在Alice收到Bob的公钥证书后,Alice会使用CA的公钥来解密证书,在解密证书后可以得到Bob的公钥B,接着可以使用公钥B来检测数字签名的合法性了,从而达到验证公开秘钥的合法性的目的。总结一句话就是,Alice可以保证收到的就是Bob的公钥B,如果不是,那么浏览器会提出警告,详细过程请参考这篇文章。https://blog.csdn.net/qq_28267025/article/details/78070211

完整性保护

在HTTPS采用SSL或者TLS发送数据时,应用层发送数据时会附加一种叫做MAC(Message Authentication Code)的报文摘要。MAC能够查知报文是否遭到篡改,从而保证报文的完整性。

至此,加密+验证+完整性保护 = HTTPS就讲完了,如果文章有错误麻烦指出来相互学习。

参考文献:

《图解HTTP》

猜你喜欢

转载自blog.csdn.net/Hollake/article/details/90644163