详解HTTPS原理

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

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


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




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


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


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

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

HTTPS是身披SSL保护外衣的HTTP

HTTPS并非应用层的一种新协议,只是http通讯接口部分用SSL(secure socket layer)和TLS(transport layer security)协议代替.

通常,http直接和tcp通信.当使用ssl时,则演变成先和ssl通信,再由ssl和tcp通讯.so,所谓https其实就是身披ssl保护外衣的http.

HTTPS采用混合机密机制

在对ssl了解之前先了解两种加密技术.

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

HTTPS的安全通信机制

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





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

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

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

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

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

6.客户端继续发送change cipher spec报文.该报文会提示想服务器,在此报文之后的通讯会采用pre-master secret密钥加密

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

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

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

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

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

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

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

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

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


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

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

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

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

为什么不一直使用HTTPS?

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

ps:SSL证书参考下面的消息;

免费的目前有 2 个

国内的:免费SSL证书申请

国外的:StartSSL™ Certificates & Public Key Infrastructure

备注:其实,国内的这家的根证书,也是startssl签发的,实际上还是等于是startssl提供的免费证书。

便宜的有很多家,这里列举几个:

Namecheap:Cheap SSL Certificates from $7.95/yr • Namecheap.com

还是Namecheap:SSL Certificates. Buy Cheap SSL Certs from $4.99/yr

cheapssl:Cheap SSL Certificates. Buy or Renew Cheapest SSL at $4.80

再补充 2 个卖便宜 SSL 的:

Gogetssl:https://www.gogetssl.com/domain-validation/comodo-positive-ssl/

Starfieldtech:https://www.starfieldtech.com/

以上来自<图解HTTP>

推荐阅读更多精彩内容