HTTPS协议的工作原理

上一篇文章说到HTTP的缺点,并引入了HTTPS,这篇文章来看看HTTPS通信的原理是怎样的。(其实抛去HTTP协议,HTTPS就剩下一个Secure安全协议,可以是SSL或是TLS,我们主要探讨的是这种安全机制是怎么实现的)

因为HTTP有以下三个缺点:无加密,无身份认证,无完整性保护,因此所谓的HTTPS,它其实就是HTTP+加密+身份认证+完整性保护。HTTPS并不是一种新的协议,在通信接口使用了SSL和TLS协议而已。HTTP通常直接和TCP通信,而HTTPS中HTTP先和SSL通信,再由SSL和TCP进行通信。模型如下

需要注意的是,SSL协议并不是一个应用层协议,它是介于应用层和传输层协议之间的一个安全协议。

对称密钥加密

SSL采用对称密钥进行加密,所谓的对称密钥,就是加密和解密都用同一个密钥,因此也叫做共享密钥加密。

但是这种方法也有一个弊端,一旦密钥被第三方获得了,就可以对数据进行解密并窃取,因此这并不是一个完全安全的方法。事实上,如果加密解密方法十分简单,是很容易被第三方截取的。

所以这种方法的缺陷就在于,如果一方不发送密钥,对方就无法利用密钥解密。另外,如果发送了密钥,但是密钥被第三方截取了,数据就容易被窃取。因此,需要一种方式,能够保证该密钥能够确保送到对方手中并且还不能够让第三方截取。 

非对称密钥加密

SSL还采用了一种技术就是非对称密钥加密,所谓的非对称密钥,就是这是一对密钥,一个是私钥,一个是公钥。私钥不能让其他任何人知道,而公钥可以随意发布,任何人都可以获得到,因此这种加密方式也叫公开密钥加密。

它的原理是这样的:

  • 客户端向服务器发起请求,服务器创建一对非对称密钥,将公有私钥返回给可客户端,自己保留着这个私钥而不发送。
  • 客户端收到了来自服务器的公钥,于是将自己的数据通过公钥加密,并返回给服务器
  • 服务器接收到了客户端的数据,因为使用自己发送的公钥加密的,因此用自己的私钥对其进行解密,拿到数据
  • 即使第三方拿到了加密后的数据,因为没有私钥,因此也无法获取到真实的数据。假如想要破解这个解密方式,是十分困难的。

HTTPS使用两种加密方式的混合加密

对称密钥加密方式的优缺点:

  • 优点:处理速度快
  • 缺点:但是容易被第三方盗取

非对称密钥加密方式的优缺点:

  • 优点:更加安全,不容易被盗取
  • 缺点:处理效率相比对称密钥加密要慢,如果在通信时用这种方式加密,效率很低

于是HTTPS采用了两者的优点,使用了混合加密的方式

  • 使用非对称密钥加密的方式安全地交换再稍后对称密钥加密中要使用的密钥
  • 确保交换的密钥是安全的之后,放弃非对称密钥加密,使用对称密钥加密来进行通信,保证传输效率

HTTPS使用的各种证书

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

客户端无法判断自己收到的服务器的公钥是否是正确的,是否在服务器发送给客户端的过程中被第三方篡改了。

为了解决上面的问题,服务器可以使用由数字证书认证机构(CA)颁发的证书,这种机构是客户端和服务器双方的第三方机构。服务器获取证书的流程如下:

  1. 服务器运营人员向CA提出公开密钥的申请
  2. CA在判明申请者的身份之后,会对已申请的公开密钥做数字签名,然后将这个签名的公开密钥和放入公钥证书分配给服务器公司
  3. 服务器会把这个由CA颁发的公钥证书以及公开密钥发送给客户端,以此来和客户端进行通信
  4. 接收到证书的客户端可以使用公开密钥对证书上的签名进行认证,一旦认证通过,客户端就可以知道认证服务器公开密钥的是真实有效的CA,并且服务器的公开密钥是值得信赖的

CA的公开密钥已经事先植入到浏览器中,客户端通过CA的公开密钥向CA认证服务器的公钥证书上的数字签名的真实性。

证明企业真实性的EV SSL证书

该证书用来验证服务器背后运营的企业的合法性

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

该证书用来向服务器证明,与之通信的客户单是预料之内的客户端。

想要获取证书 时,用户得自行安装客户端证书,但是客户端证书是要付费买的。

因为成本比较大,因此只有某些特定的业务,如网上银行等,就需要使用客户端证书。

HTTPS是怎么解决HTTP协议的三大缺点的?

  • 防监听:采用对称加密对数据进行加密,采用非对称加密对对称加密的密钥进行加密
  • 防伪装:通信双方携带证书,证书有第三方颁发,很难伪造
  • 防篡改:采用摘要算法(MD5或是SHA-1),同样的数据由同样的摘要,而只要有一点不同的数据,它的摘要往往不同,只要数据做了篡改,就会被感知到。

HTTPS的通信流程

  1. 客户端向服务器发起SSL通信,报文中包含客户端支持的SSL的指定版本,加密组件列表(所使用的加密算法及密钥长度)
  2. 服务器的响应报文中,包含SSL版本以及加密组件,服务器的加密组件内容是从客户端发来的加密组件列表中筛选出来的,服务器还会发一个公开密钥并且带有公钥证书
  3. 客户端拿到服务器的公开密钥,并验证其公钥证书(使用浏览器中已经植入的CA公开密钥)
  4. 如果验证成功,客户端生成一个Pre-master secret随机密码串,这个随机密码串其实就是之后通信要用的对称密钥,并用服务器的公开密钥进行加密,发送给服务器,以此通知服务器,之后的报文都会通过这个对称密钥来加密
  5. 同时,客户端用约定好的hash算法计算握手消息,然后用生成的密钥进行加密,一起发送给服务器
  6. 服务器收到客户端发来的的公开密钥加密的对称密钥,用自己的私钥对其解密拿到对称密钥,再用对称密钥解析握手消息,验证hash值是否与客户端发来的一致。如果一致,则通知客户端SSL握手成功
  7. 之后的数据交互都是HTTP通信(当然通信会获得SSL保护),且数据都是通过对称密钥来加密(这个密钥不会每次都发,在握手的过程中,服务器已经知道了这个对称密钥,再有数据来时,服务器知道这些数据就是通过对称密钥加密的,于是就直接解密了)

HTTP与HTTPS的区别

  1. HTTPS更加安全,因为它有加密,身份认证,验证数据完整性等环节
  2. HTTPS需要申请证书,要付费(要钱!一年大概600元)
  3. 加密通信需要消耗更多的cpu和内存资源,如果每次通信都加密,会消耗很多的资源,当访问量很多的那些网站在进行加密处理时,它们所承担着的负载就很多了,这个时候就需要服务器端实现负载均衡。(有专用的https加解密硬件服务器)
  4. 使用端口不同,HTTP使用的是80端口,HTTPS使用的是443端口
  5. 所在层次不同,HTTP运行在TCP之上,HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS运行在TCP之上

以上内容大多是总结《图解HTTP》一书,用自己的话理解得来。

猜你喜欢

转载自blog.csdn.net/lvyibin890/article/details/82462041