HTTP 和 HTTPS 理解
1. 首先 HTTP + 明文加密 + 身份验证 + 数据完整性保护 = HTTPS【HTTP 协议 + SSL/TLS 协议】
2. HTTP 协议是用来客户端和服务器端进行通信的协议,但其存在三个缺点:
【1】报文是明文发送的,即没有经过任何加密处理,在传输过程中可以被窥视到信息,比如客户端输入了自己的身份证号或者信用卡密码,那么这些信息在传送到服务器端的过程中,可能直接会被抓包解析被他人利用。
【2】客户端和服务器端的通信没有身份认证,也就是说,服务器端收到的请求真的来自正确的客户端吗?客户端收到的响应真的是希望请求的服务器端发出的吗?这些我们都无从而知,由此也导致了伪造客户端身份和伪造服务器端身份的问题。同时因为不需要验证身份,所有人都可以向服务器发送请求,服务器来者不拒,那么可能会有海量请求下的 DOS 攻击,造成服务器崩溃。
【3】HTTP 不存在验证信息完整性的功能,因此如果有攻击者在请求和响应过程中将请求和响应拦截,并篡改了请求或者响应内容,这些我们都无法探测到。因此最终客户端和服务器端得到的报文是否和发出时的一致,是否已经被篡改都是一个问题。
3. 为了解决 HTTP 的缺陷,提出了 HTTPS,当网站使用 HTTPS 加密时,一般地址栏会出现一个 "锁" 的标志。
HTTPS 并非是应用层区别于 HTTP 的一种新协议,它只是 HTTP 协议添加了一个 SSL 协议作为应用层和传输层通信接口。《图解HTTP》图示:

通常 HTTP 和 TCP 直接通信,当使用 SSL 时,HTTP 和 SSL 先进行通信,之后由 SSL 和 TCP 通信。SSL 是独立于 HTTP 的协议,它也可以配合其它通信协议使用。
4. SSL :
【1】相互交换秘钥的公开密钥加密技术:
(1)很遗憾,在了解公开密钥加密技术之前,还需要了解一个共享密钥加密技术:
所谓共享密钥加密技术,就是客户端和服务器端在互相发送信息时,会把报文用一把密钥加密,同样的只有使用同一把密钥才可以解析出真正的报文内容。
但是问题来了,既然加密和解密使用的是同一把密钥,那么加密方必须把这把密钥发给解密方,解密方才能解密,这很容易理解吧?那怎么才能保证这把密钥在传送给解密方时不会被他人获取呢?如果说没有人恶意获取这把密钥,那么为什么还要加密处理呢?都已经没有人想要获取密钥解密数据了,你直接把数据发送过去不就好了。所以发送密钥的安全问题和发送明文数据的安全问题是一致的,这种共享密钥加密技术由于需要将密钥互相发送,密钥也会有被拦截获取的风险。

(2)由此引出公开密钥加密技术:好,既然说密钥发送过程有风险,那我使用两把密钥,一把密钥叫做公开密钥,另一把密钥叫做私有密钥。公开密钥负责加密数据,私有密钥负责解密数据,我在通信过程中,把公开密钥发送给对方,对方使用我的这把公开密钥把数据进行加密,再发送回来,而解密只有配套的私有密钥才可以实现,我在收到对方回传的数据后,用我自己私藏的私有密钥解密获取信息即可。那这个时候,我发送公有密钥,你随便怎么拦截获取都无所谓,毕竟你没有私有密钥,你解不了密。

【2】HTTPS 采用混合加密机制:
我们刚刚介绍了两种加密方法:一种是共享密钥加密,另一种是公开密钥加密。公开密钥加密的效率比共享密钥加密要低,那么 HTTPS 集各家之长,两种方式均使用。
首先,共享密钥加密的问题是密钥在发送过程中可能会被拦截获取,而公开密钥加密的问题是效率较低,那么我们用公开密钥加密的方式把共享密钥加密用的密钥发送过去,之后一直使用共享密钥加密就完美了。

【3】对公开密钥加密方式的补充:数字证书认证:【此处为服务器端公钥证书,客户端流程类似,但一般都是服务器端证书】
公开密钥加密方式,其实也是存在一些问题的,比如无法证明获取到的公开密钥是货真价实的公开密钥,如果攻击者在中途将公开密钥替换掉,是无法发现的。
为了解决上述问题,需要使用到 数字证书认证机构 颁发的 公开密钥证书。一般通过证书验证公开密钥并通信的过程如下:
(1)服务器将自身的公开密钥提交给第三方数字证书认证机构。
(2)第三方机构用自己的私有密钥给服务器的公开密钥署数字签名并颁发公钥证书,公钥证书会和服务器的公钥绑定在一起。
(3)客户端【浏览器厂商事先已经将认证机构的公开密钥植入浏览器内部】接收服务器的公钥证书【公钥证书上有认证机构的数字签名和服务器端的公钥】,使用已经植入浏览器的认证机构公钥与服务器提供的公钥证书数字签名核对,以确保服务器公钥的真实性。
(4)客户端使用服务器端的公钥进行报文加密发送。
(5)服务器接收加密报文,并用服务器端的私钥对报文解密。

【4】为何不都采用 HTTPS 方式呢?
(1)HTTPS 需要增加一个 SSL 协议,通信的内容量增加,并且 SSL 需要进行加密计算,消耗硬件处理器资源。一般只有在隐私保密信息的传输过程才会使用 HTTPS。
(2)HTTPS 需要认证证书,第三方机构会进行收费,因此对于一些个人网站,可能会选择采取 HTTP 协议通信。
5. HTTP 和 HTTPS 的区别?
HTTP HTTPS
(1)端口号: 80 443
(2)安全性: 较差 加密,安全性好
(3)资源消耗: 少 多
(4)需要证书: 不需要 需要
(5)协议: 基于TCP 基于SSL,SSL基于TCP

浙公网安备 33010602011771号