互联网协议之HTTP(S)

互联网协议之HTTP(S)

HTTP

HTTP(超文本传输协议),是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。

目前几乎所有的网页信息传输都基于HTTP协议。

版本产生时间内容发展现状
HTTP/0.91991年不涉及数据包传输,规定客户端和服务器之间通信格式,只能GET请求没有作为正式的标准
HTTP/1.01996年传输内容格式不限制,增加PUT、PATCH、HEAD、 OPTIONS、DELETE命令正式作为标准
HTTP/1.11997年持久连接(长连接)、节约带宽、HOST域、管道机制、分块传输编码2015年前使用最广泛
HTTP/22015年多路复用、服务器推送、头信息压缩、二进制协议等逐渐覆盖市场

HTTP2相对于HTTP1,有了较大的提升,最重要的一点就是可以通过单一的HTTP/2连接请求发起多重的请求-响应消息,多个请求stream共享一个TCP连接,实现多留并行而不是依赖建立多个TCP连接;这样能够同时加载多个文件,有利于提升网页的响应速度。

这个Akamai公司建立的一个官方的演示,使用HTTP/1.1和HTTP/2同时请求379张图片,观察请求的时间,明显看出HTTP/2性能占优势。

200603_http_1.jpg?x-oss-process=style/Compress

HTTP协议特点

  • 简单、快速、灵活:当用户想服务器发送请求时,只需传送请求方法和路径即可,HTTP 允许传输任意类型的数据对象。并且 HTTP 协议简单易用,HTTP 服务器规模小,保证了网络通信的速度;
  • 无连接、无状态:HTTP协议限制每次连接只处理单个请求,当服务器收到用户请求后就会断开连接,保证了传输时间的节省。同时HTTP协议对事务处理没有记忆能力,如果后续的请求需要使用前面的信息就必须重传数据;
  • 管线化和内容编码:随着管线化技术的出现,HTTP 请求比持久性连接速度更快,并且当某些报文的内容过大时,为了减少传输的时间,HTTP 会采取压缩文件的方式;
  • HTTP 支持客户/服务器模式

HTTPS

HTTPS是身披SSL外壳的HTTP。

HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。

200603_http_2.png?x-oss-process=style/Compress

HTTPS访问过程

  1. 浏览器发出握手请求,将支持的加密信息发送给网站服务器;
  2. 网站服务器回应握手请求,选择出一套加密算法和哈希算法,将验证身份的信息以证书(证书发布 CA 机构、证书有效期、公钥、证书所有者、签名等)的形式发送给Web浏览器;
  3. 当 Web 浏览器收到证书之后首先需要验证证书的合法性,如果证书受到浏览器信任则在浏览器地址栏会有标志显示,否则就会显示不受信的标识。当证书受信之后,Web 浏览器会随机生成一串密码,并使用证书中的公钥加密。之后就是使用约定好的哈希算法握手消息,并生成随机数对消息进行加密,再将之前生成的信息发送给网站;

200603_http_3.png?x-oss-process=style/Compress

  1. 当网站服务器接收到浏览器发送过来的数据后,会使用网站本身的私钥将信息解密确定密码,然后通过密码解密Web浏览器发送过来的握手信息,并验证哈希是否与 Web 浏览器一致。然后服务器会使用密码加密新的握手信息,发送给浏览器;
  2. 最后浏览器解密并计算经过哈希算法加密的握手消息,如果与服务发送过来的哈希一致,则此握手过程结束后,服务器与浏览器会使用之前浏览器生成的随机密码和对称加密算法进行加密交换数据。

200603_http_4.png?x-oss-process=style/Compress

HTTPS加密算法

  • 对称加密:有流式、分组两种,加密和解密都是使用的同一个密钥。
    例如:DES、AES-GCM、ChaCha20-Poly1305 等。
  • 非对称加密:加密使用的密钥和解密使用的密钥是不相同的,分别称为:公钥、私钥,公钥和算法都是公开的,私钥是保密的。非对称加密算法性能较低,但是安全性超强,由于其加密特性,非对称加密算法能加密的数据长度也是有限的。
    例如:RSA、DSA、ECDSA、 DH、ECDHE 等。
  • 哈希算法:将任意长度的信息转换为较短的固定长度的值,通常其长度要比信息小得多,且算法不可逆。
    例如:MD5、SHA-1、SHA-2、SHA-256 等。
  • 数字签名:签名就是在信息的后面再加上一段内容(信息经过 hash 后的值),可以证明信息没有被修改过。hash 值一般都会加密后(也就是签名)再和信息一起发送,以保证这个 hash 值不被修改。

HTTPS特点

  • 内容加密:采用混合加密技术,中间者无法直接查看明文内容
  • 验证身份:通过证书认证客户端访问的是自己的服务器
  • 保护数据完整性:防止传输的内容被中间人冒充或者篡改

HTHS

HSTS是国际互联网工程组织 IETF 正在推行一种新的 Web 安全协议,网站采用 HSTS 后,用户访问时无需手动在地址栏中输入 HTTPS,浏览器会自动采用 HTTPS 访问网站地址,从而保证用户始终访问到网站的加密链接,保护数据传输安全。

在我们通常使用中,往往是直接输入域名,如 www.oren.ink 进行访问,浏览器会默认访问 http://www.oren.ink ,此时是没有加密的,如果服务器端也没有做HTTPS跳转,那么我们的信息仍然是不安全的。易受到黑客的攻击,所以HSTS可以让用户在访问时,自动跳转到HTTPS。

开启 HSTS 以后,可以到 ssllabs 进行测试,网站的安全等级会进一步提升。

200603_http_5.png?x-oss-process=style/Compress

HTHS原理

  • 首先在服务器响应头中添加 HSTS 响应头:
Strict-Transport-Security: max-age=expireTime [; includeSubDomains] [; preload]
此响应头只有在 https 访问返回时才生效,其中[ ]中的参数表示可选;
  • 设置 max-age 参数,时间设置不宜过长,建议设置时间为 6 个月;
  • 当用户下次使用 HTTP 访问,客户端就会进行内部跳转,并且能够看到 307 Redirect Internel 的响应码;
  • 网站服务器变成了 HTTPS 访问源服务器。

总结

从 HTTP 到 HTTPS 再到 HSTS,网站的安全系数一直在上升,防止 DNS 劫持、数据泄密的力度也再加大。


参考:
HTTP 到 HTTPS 再到 HSTS 的转变
HTTP和HTTPS协议,看一篇就够了