一直听说https比http安全,https 是加过密的http。但是https具体是怎样加SSL/TLS协议运行机制的概述 密认证的?http和https的安全性区别在哪里?https对服务器性能有什么影响?带着这些疑问查阅了相关资料,并记录。

http和https的区别

不使用SSL/TLS的通信,就是我们所说的http通信,有以下三种风险:

  • 窃听风险(eavesdropping):第三方可以获知通信内容。
  • 篡改风险(tampering):第三方可以修改通信内容。
  • 冒充风险(pretending):第三方可以冒充他人身份参与通信。

当我们对http通信使用SSL/TLS协议后,就是我们所说的https通信,希望达到:

  • 所有信息都是加密传播,第三方无法窃听。
  • 具有校验机制,一旦被篡改,通信双方会立刻发现。
  • 配备身份证书,防止身份被冒充。

https通信过程

时序图如下


说明:

  • 步骤1中的证书包含了公钥、颁证机构、网址、过期时间。
  • 如果服务器端需要客户端提供证书,则会在步骤1中的返回信息中增加一个参数(要求客户端提供证书),那么步骤4中也会增加一个参数(客户端证书)。
  • 客户端和服务器端生成对称密钥后,之后所有的通信都使用对称秘钥加密。

结合实例

当一个人(小明)登录一个网站后,该网站的服务器会为小明分配一个sessionId,发送给客户端,当小明再次请求这个服务器时,携带着上次分配的sessionId,这样服务器就知道是小明访问的网站了。

  • 假设这个请求是http请求。那么,第三方就可以获取这个请求的信息,获取sessionId。然后携带着这个sessionId模拟http请求,那么服务器就会认为是小明发送的请求,第三方就可以获取、修改小明的数据等。
  • 假设这个请求是https请求。同样的,第三方获取到了请求的相关信息,但是并不知道这里面的内容是什么,因为这些数据都是经过加密的。如果别人修改了数据,服务器也会知道这个数据被别人修改了,因为SSL/TLS协议对数据通过hash算法(如sha1、md5)加密,加密结果不一致,就会被认为内容被篡改过了。
    通过上面两个实例,你会不会认为使用https就一定安全呢?如果是,那你就错了。https只能保证内容在传输的过程中不会被别人篡改或者窃取。但是,如果数据在客户端或者服务器端被窃取或者修改,也一样存在风险。

http和https对服务器性能的影响

网站实现https,国外比较普及,但是在国内很多网站并没有使用https,其中一个比较重要的原因是网站的用户体验和性能下降明。那么使用https对网站的性能到底有多大的影响呢?
http使用TCP 三次握手建立连接,客户端和服务器需要交换3个包,https除了 TCP 的三个包,还要加上 ssl握手需要的9个包,所以一共是12个包。一个链接测试,http是114毫秒;https建立连接,耗费436毫秒。ssl 部分花费322毫秒。
你可能会问,每一次请求都需要那么多时间么?答案是否定的,第一次进行https通信时握手阶段生成的对称秘钥后,接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用”会话密钥”加密内容。
HTTP与HTTPS性能 文章中,提出了具体的优化方案,期待将来有机会在项目实战中使用到。

参考文献:

  1. HTTP 必死:先知 Google 唿吁大家升级 HTTPS, 网页浏览更有保障
  2. http 和 https 有何区别?如何灵活使用?
  3. 扒一扒HTTPS网站的内幕
  4. SSL/TLS协议运行机制的概述
  5. https时序图