十分钟了解HTTPS
只要十分钟,十分钟你看了不吃亏,十分钟你看了不上当,十分钟就可以让你对HTTPS的话题对酒当歌侃侃而谈,来吧备上花生瓜子八宝粥让我们荡起双桨 走起~
阅读本文需要您对HTTP有基本了解,读完大概需要十分钟左右。
一、为什么要用HTTPS——HTTP协议的缺陷
通信使用明文(不加密),内容可能会被窃听
不能验证通信方的身份,所以请求和响应都有可能是攻击者发送的
数据包在由A到B的过程中,可能经历很多次路由转发,这个过程中数据包可能会被劫持和替换,A和B都无法确定收到的信息是否就是对方发送的。
无法证明报文的完整性,可能是经过篡改的信息。
同样是在A到B传输过程中,数据包被劫持、篡改之后继续传输,虽然接收方收到的数据包就是发送方发送的那个,但是内容已经遭到篡改,这样无法保证报文的完整性。
二、HTTPS是怎么克服这些缺陷的?
2.1 HTTPS是什么?
HTTPS:在HTTP通信时增加一层TLS通信,以前是HTTP直接和TCP通信,现在HTTP先与TLS通信,再由TLS和TCP进行通信。HTTPS拥有加密、证书校验身份、准确性校验这些功能,避免了HTTP的三个缺陷。
TLS的前身是SSL,TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。
HTTP建立通信时,只需要进行TCP三次握手就可以开始传输数据了,而HTTPS在建立通信时,先进行TCP三次握手,再进行TLS握手,然后开始发送数据。
2.2 HTTPS的加密功能
加密技术分为:
共享密钥加密,也叫对称密钥加密,只有一把密钥,通信方必须先将密钥发送给接收方,然后接收方使用密钥对密文解密,但是密钥发送的过程很难保证安全,一旦密钥被窃取,就不能保证加密的安全了。
公开密钥加密,即非对称密钥加密,有两把密钥,公钥public key 和私钥private key
公钥是公开的,可以随意发布,任何人都可以获得。A使用B发布的公钥加密报文,B接收后使用自己的私钥进行解密,这样私钥不需要传输,也就不必担心被窃取的风险。
对称加密处理速度要比非对称加密要快,所以在保证安全的基础上,应多使用对称加密方式。TLS采用非对称加密的加密方式,HTTPS采用混合加密机制:大部分通信使用对称密钥加密,但首次交换共享密钥时是使用非对称加密的方式,这样就既保证了安全,又速度最快。
2.3 HTTPS的身份认证功能
按照上文介绍的非对称加密方式,会有一个安全缺陷:客户端怎么知道拿到的公钥是否就是服务端发放的公钥呢,因为在拿到的过程中,公钥有可能被掉包。于是为了避免这个缺陷,引入了证书的概念。
公钥证书
为了保证公钥是目标服务器发行的公钥,需要使用权威第三方机构(以下称为CA机构)颁发的公钥证书:
- 服务器去CA机构申请证书,机构颁发加数字签名的公钥证书,数字签名可以使用CA机构的公钥来验证;
- 服务器把公钥证书以公开密钥加密方式传给客户端;
- 浏览器内会植入常用CA机构的公钥;
- 客户端从浏览器拿到CA机构的公钥,并用它验证收到的公钥证书的数字签名,验证通过,证明服务器的公钥值得信任,客户端就从公钥证书取出公钥。
总结一下就是服务器传递的公钥上有CA的签名,客户端通过验证签名证实服务器的身份,并安全地得到公钥。
HTTPS首次交换共享密钥使用的是非对称加密方式,这种加密方式会使用公钥证书来验证服务端的身份。而想要验证客户端的身份就不是那么容易了,需要用户去申请证书,而且权威机构的证书是要花钱的,所以客户端身份验证充满挑战。现状是,仅有特殊用途的业务实现了客户端证书,比如那些可支撑客户端证书支出费用的业务,例如银行网银就采用了客户端证书。
2.4 HTTPS的完整性校验功能
在HTTPS的通信流程中,应用层发送数据时,会附加一种叫做MAC的报文摘要,MAC能够查知报文是否遭到篡改,从而保护报文的完整性。
三、HTTPS建立通信的过程简介
HTTPS首次建立通信时,假设C是客户端client,S是服务器端server,以SSL为例:
C/S会先进行TCP三次握手;
然后C发送Client Hello报文及其他SSL信息,表示开始SSL通信过程;
S收到后回以Server Hello及其他SSL信息,此外S还发送公钥证书,随后发送Server Hello Done通知Client SSL握手协商部分结束
即SSL第一次握手结束,这个过程最重要的是S把公钥证书交给了C;
C验证公钥证书有效性,然后取出公钥,然后:
- 回以Client Key Exchange报文,报文中包含通过公钥加密过的Pre-master-secret是一个随机密码串。
- C接着发送Change Cipher Spec报文,告诉S此报文后的通信会用Pre-master-secret进行加密。
- C发送Finished报文,并包含上述全部报文的整体校验值。这次握手协商能否成功,要看S是否正确解密该报文。
S收到加密过的pre-master secret,用自己的私钥得到pre-master secret,然后:
发送Change Cipher Spec报文
S发送Finished报文。
C/S使用pre-master secret经过一系列步骤生成master secret,使用master secret生成对称密钥session key,之后传输的收据均使用session key加密解密。
至此,SSL连接建立完成,这个过程最重要的是C把Pre-master-secret用上一步传递的公钥加密后传给S。之后开始进行HTTP通信,并用共享密钥对通信进行对称加密。
四、HTTPS的问题
当使用SSL时,它的处理速度变慢:
- 通信速度变慢,因为除了HTTP请求和响应,还要进行SSL通信,通信量会增加
- 因为C/S端都要加密解密,更耗计算资源,SSL加速器可以改善S端问题
建议的是如果非敏感信息使用HTTP通信,只有在包含个人信息等敏感数据时,才利用HTTPS进行通信。特别是访问量较多的网站在加密处理时,会承担较大的负载,可以仅在需要信息隐藏时才加密,以节约资源。但是查看淘宝、京东都是所有请求都采用的HTTPS,也有搜索到一些讲部分页面采用HTTP,部分页面采用HTTPS的部署方法的博文,因为现在我对部署这一块的东西还比较生疏,所以后续有时间再关注。
默认端口
- HTTP默认端口80
- HTTPS默认端口443