程序员

HTTPS = 身披SSL外壳的HTTP

2018-09-12  本文已影响0人  书写不简单

进入正题之前先在关公面前耍一下大刀


timg.jpg

HTTP协议主要负责客户端与服务端之间的通信。1996年5月被正式作为标准通信协议,至今仍然被广泛使用在服务器端,可谓“协议中的优秀协议”。但是如此优秀的协议也有大大的缺点...

HTTP主要有以下几个方面的不足之处:

用于以上不足之处的HTTP,要想保证信息的完整性是非常困难的,必须和其他的协议组合使用,才能有效防止上述弊端!这就是HTTPS应运而生的前提。

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

HTTPS并非是一种新的协议,只是HTTP通信接口部分用了SSL和TLS两种协议取代而已。SSL(Secure Socket Layer)、TLS(Transport Layer Security)。
通常,HTTP直接和TCP通信,当使用了SSL之后,则变为HTTP先和SSL通信,再也SSL与TCP通信。

应用(HTTP) 应用(HTTPS)
TCP SSL
IP TCP
IP

SSL是独立与HTTP的协议,所以不仅仅是HTTP协议,其他运行在应用层的协议均可以使用SSL协议。

SSL是采用一种叫做公开密钥加密(Public-Key cryptography)的加密处理方式。

先前的加密方法中 加密算法是公开的,但是密钥是保密的,通过这种方式得以保持加密方法的安全性。

加密和解密都是需要密钥的,没有密钥就无法解密,反过来说,如果有人获取到了密钥,就可以对信息进行解密,那加密也就失去了意义。

共享密钥:加密和解密用同一个密钥的方式,以这种方式加密,必须将密钥发给对方,可是怎么保证在发送的过程中,密钥不被攻击呢?


共享密钥困境.jpg
发送密钥.jpg

公开密钥加密方式很好地解决了共享密钥加密的困境,它使用的时一种非对称密钥,一把叫私有密钥,一把叫公开密钥。私有密钥自己独有,公开密钥可以随意发布。


公开密钥.jpg

使用公开密钥加密的方式,发送密文的一方,利用对方的公开密钥进行加密,然后发给接收方,接收方收到消息之后,利用自己的私有密钥进行解密,即可得到密文。完美的避开了发送密钥、密钥别窃取的风险。

但是依据目前的技术,要想做到根据密文和公开密钥恢复信息原文是相当困难的,因为解密过程就是在对离散对数进行求值,实现起来很困难。

所谓混合机制:采用共享密钥和公开密钥共同加密的方式进行处理信息。
如果公开密钥能够安全的传送,那么可以考虑仅仅使用公开密钥方式进行加密处理,但是公开密钥的处理速度要比共享密钥慢的多。
所以,应该充分利用两种加密方式的长处。在交换密钥环节使用公开密钥进行加密(加密的信息:共享密钥的私有密钥),之后的建立通信交换信息阶段则使用共享密钥加密方式


混合加密.jpg

遗憾的是,公开密钥加密方式页存在漏洞,那就是无法验证公开密钥本事就是货真价实的密钥。比如:客户端A 正准备和服务器B 建立公开密钥加密方式下的通信时,如果证明收到的密钥就是服务器B发行的公开密钥?或许在传输的过程工,真正的密钥已经被攻击者替换掉了。。。

为了解决公开密钥正确性的问题,可以使用由数字证书认证机构(CA)和相关机关颁发的公开密钥证书。

大致的业务流程:服务器向数字证书认证机构提出公开密钥的申请,该机构在判明服务器身份之后,对已申请的公开密钥进行数字签名,并将该公开密钥放入到公钥证书。
服务器将该公钥证书发给客户端来进行公开密钥加密方式通信。
接到证书(服务器发送)的客户端,使用数字证书认证机构的公开密钥(服务器发送),对证书上的数字签名进行验证。大致流程图如下:


验证公开密钥流程.jpg
上一篇下一篇

猜你喜欢

热点阅读