详解HTTPS原理

发布时间:2018/6/18 23:43:49 打印 字号:

HTTP协议是目前非常普及的应用层传输协议,了解HTTPS之前要先知道HTTP的缺点。

1.通信使用明文(不加密),内容可能被窃听。(抓包工具可以获取请求和响应内容)

1217845-4775a59681bb9022.png

2.不验证通讯方的身份,可能遭遇伪装。(任何人都能发送请求,不管对方是谁都会返回响应)。

1217845-5cd6780ca1ba6ab0.png

3.无法证明报文的完整性,可能会遭篡改。(没有办法确认发出的请求/响应和接收到的请求/响应前后一致)

1217845-246d6338cb86b685.png


这些问题不止会在HTTP上出现,在其他未加密的协议中也会出现这类问题


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

为了解决上述问题,需要再http加再加入处理和认证等机制。我们把添加了加密和认证机制的http称之为https(http secure)

HTTPS是身披SSL保护外衣的HTTP

HTTPS并非应用层的一种新协议,只是http通讯接口部分用SSL(安全套接字层)和TLS(传输层安全)协议代替。

通常,HTTP直接和TCP通信。当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通讯。所以,所谓的https其实就是身披SSL保护外衣的HTTP。

HTTPS采用混合机密机制

在对SSL了解之前先了解两种加密技术。

公开密钥加密(公钥密码) - >加密算法是公开的,而密钥是保密的。加密和解密都会用到密钥。但反过来说只要持有密钥就能解密。

共享密钥加密(共用密钥加密系统) - >也被叫做对密钥加密。以共享密钥方式加密时必须将密钥也给予对方。在互联网上转发密钥时,若果通信被监听那么密钥就会落入攻击者之手,另外还得设法安全的保管接收到的密钥。

使用两把密钥的公开密钥加密

公开密钥加密使用一对非对称的密钥。一把私钥一把公钥。私钥不能让任何人知道,公钥任何人都能获得。也就是发送密文一方使用对方的公钥进行加密处理,对方收到被加密的信息后,再使用自己的的私钥进行解密。利用这种方法不需要发送用来解密的私钥,也不必担心密钥被盗走。

HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制。若密钥能够实现安全交换,那么有可能会考虑仅适用公开密钥加密来通信。但是公开密钥加密与共享密钥加密相比,其处理速度要慢。

所以应充分利用两者各有的有事,将多种方法组合起来用于通信。在交换密钥环节适用公开密钥加密方式,之后的建立通信交换报文阶段则适用共享加密方式。

1217845-01ee2e18293c6c18.png

证明公开密钥正确性的证书

公开密钥加密方式存在一些问题,无法证实公钥真伪。为了解决这个问题,可以使用由数字证书认证机构(CA,证书颁发机构)和其相关颁发的公钥证书。

1217845-c2fbf022d6a342ba.png

可证明组织真实性的EV SSL证书

证书的一个作用是用来证明作为通信乙方的服务器是否规范,另外一个作用就是确认对方服务器背后运营的企业是否真实存在。拥有该特性的证书就是EV SSL证书(扩展验证SSL证书)

EV SSL证书是基于国际标准的认证指导方针颁发的证书。通过认证的网站能够获得更高的认可度。

持有EV SSL证书的网站浏览器地址栏处的背景是绿色的。点击后可以查看详情


1217845-2fdc28e00fdf3db4.png

1217845-61efc46fd9ca3344.png

用以确认客户端的客户端证书

HTTPS中还可以使用客户端证书。以客户端证书进行客户端认证,证明服务器正在通信的对方始终是预料之内的客户端,起作用跟服务器证书如出一辙。

想获取证书时,用户需要自行安装客户端证书,证书是付费购买的,且每张证书对应到每位用户也就意味着需支付和用户数对等的费用。另外要让不同的用户自行安装证书,这件事本身也是充满了挑战。

现状是,安全性极高的认证机构可颁发客户端证书但仅用于特殊用途的业务。比如银行的网银就采用客户端证书。客户端证书另一个问题只能证明客户端实际存在,而不能用来证明用户本人的真实。

由自认证机构颁发的证书成为自签名证书

如果使用OpenSSL的这套开源程序,都可以构建一套属于自己的认证机构,从而自己给自己颁发服务器证书。但该服务器证书在互联网不可作为证书使用。

独立构建的认证机构叫做自认证机构颁发的证书为 “自签名证书”

浏览器访问该服务器时,会显示 “无法确认连接安全性” 或 “该网站的安全证书存在问题” 等

1217845-87b49feaccc3bee4.jpg

之所以这样原因是它无法消除伪装的可能性。值得信赖的第三方机构介入认证,才能让已植入在浏览器内的认证机构颁布的公钥发挥作用,并证明服务器的真实性。

PS:中级认证机构的证书,某些浏览器会以正规的证书来对待,可有的浏览器会当做自签名证书。

HTTPS的安全通信机制

为了更好地理解HTTPS,我们观察一下HTTPS的通信步骤

1217845-caea51e5011ca364.png

1.客户端通过发送客户端hello报文开始SSL通信。报文中包含客户端支持的SSL指定版本,加密组件列表(所使用的加密算法密钥长度等)

2.服务器可进行SSL通信时,会议服务器Hello报文作文回应。报文中含SSL版本加密组件。服务器的加密组件内容是从接受客户端加密组件内筛选出来的。

3.之后服务器发送认证报文。报文中包好公开密钥证书。

4.服务器发送服务器hello done报文通知客户端。最初阶段握手协商部分结束。

5.SSL第一次握手结束后,客户端以客户端密钥交换报文作为回应。报文包含通信加密中使用的随机密码串。该报文已用步骤3中的公钥加密;

6.客户端继续发送更改密码规则报文。该报文会提示想服务器,在此报文之后的通讯会采用预主密钥密钥加密

7.客户端发送完成报文该报文包含连接至今前部报文的整体校验值。这个握手协商是否成功,要以服务器是否能够正确解密该报文作文判定标准。

8.服务器同样发送change cipher spec报文

9.服务器同样发送完报文

10.C&S finishe报文交换完毕之后,ssl连接就算建立完成。通信会受到SSL的保护。从此开始进行应用层的协议通信,即发送HTTP响应

11.应用层协议通信,即发送HTTP响应

12.最后客户端断开连接。断开连接时,发送close_notity报文。上图做了一些省略

在以上流程中,应用层发送数据时会附加一种叫做MAC(message authentication code)的报文摘要.MAC能够查询报文是佛到篡改。从而保护报文的完整性。

到此HTTP的问题基本都已经解决啦,那HTTPS就没有缺点吗

SSL最大的问题所在就是慢!

1217845-394ea16a4e0a90c2.png

SSL的慢分两种。一种指通信慢,另一种是指由于大量消耗CPU以及内存资源,导致处理速度变慢。

和使用HTTP相比网络负载可能会变慢2到100倍。出去和TCP连接,发送HTTP请求及响应以外,还必须进行SSL通信,因此整体上处理通信量不可避免会增加。

另一点是SSL必须进行加密处理。服务器和客户端都要进行加密和解密的处理。比起HTTP会更多的消耗服务器和客户端的硬件资源,导致负载增强。

针对速度变慢这一问题,并没有根本性的解决方案,我们会使用SSL加速器(专用服务器)硬件来改善该问题。该硬件为SSL通信专用硬件,相对软件来讲,能够提高数倍SSL的计算速度。仅在SSL处理时发挥SSL加速器的功效,以分担负载。

为什么不一直使用HTTPS?

目前并非所有内容都进行加密处理,而是仅在那些需要信息隐藏时才会加密,以节约资源。除此之外购买证书的开销一室原因之一

PS:SSL证书推荐使用Gworg,主要成本上面可控制。