Http/Https 协议

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

什么是HTTPS?
Https是一种通过计算机网络进行安全通信的传输协议,经由Http进行通信,利用SSL/TLS建立全信道,加密数据包。Https使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。
TLS(Transport Layer Security,传输层安全)是传输层加密协议,前身是SSL(Secure Socket Layer,安全套接字层)协议,由网景公司1995年发布,有时候两者不区分。

Http/Https都是客户端浏览器或其他程序与Web服务器之间的应用层通信协议

Http                 Https
--------------------------
HTTP                 HTTP
TCP                  SSL/TLS
IP                   TCP
                     IP

传统的Http协议是一种应用层的传输协议,Http直接与TCP协议通信。其本身存在一些缺点:

  • Http协议使用明文传输,容易遭到窃听。
  • Http对于通信双方都没有进行身份验证,通信的双方无法确认对方是否是伪装的客户端或者服务端。
  • Http对于传输内容的完整性没有确认的办法,往往容易在传输过程中被劫持篡改。

Https = Http + 加密 + 认证 + 完整性保护。

Https的加密

近代密码学中加密的方式主要有两类:

  • 对称秘钥加密

对称秘钥加密是指加密与解密过程使用同一把秘钥。这种方式的优点是处理速度快,但是如何安全的从一方将秘钥传递到通信的另一方是一个问题。(DES、AES-GCM、ChaCha20-Poly1305等)

  • 非对称秘钥加密

非对称秘钥加密是指加密与解密使用两把不同的秘钥。这两把秘钥,一把叫公开秘钥,可以随意对外公开。一把叫私有秘钥,只用于本身持有。得到公开秘钥的客户端可以使用公开秘钥对传输内容进行加密,而只有私有秘钥持有者本身可以对公开秘钥加密的内容进行解密。这种方式克服了秘钥交换的问题,但是相对于对称秘钥加密的方式,处理速度较慢。(RSA、DSA、ECDSA、 DH、ECDHE等)

SSL\TLS的加密方式则是结合了两种加密方式的优点。首先采用非对称秘钥加密,将一个对称秘钥使用公开秘钥加密后传输到对方。对方使用私有秘钥解密,得到传输的对称秘钥。之后双方再使用对称秘钥进行通信。这样即解决了对称秘钥加密的秘钥传输问题,又利用了对称秘钥的高效率来进行通信内容的加密与解密。

Https的认证

SSL\TLS采用的混合加密的方式还是存在一个问题,即怎么样确保用于加密的公开秘钥确实是所期望的服务器所分发的呢?也许在收到公开秘钥时,这个公开秘钥已经被别人篡改了。因此,我们还需要对这个秘钥进行认证的能力,以确保我们通信的对方是我们所期望的对象。
目前的做法是使用由数字证书认证机构颁发的公开秘钥证书。服务器的运营人员可以向认证机构提出公开秘钥申请。认证机构在审核之后,会将公开秘钥与共钥证书绑定。服务器就可以将这个共钥证书下发给客户端,客户端在收到证书后,使用认证机构的公开秘钥进行验证。一旦验证成功,即可知道这个秘钥是可以信任的秘钥。

Http通信过程
  • 1、建立tcp连接:

在Http工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能进行更深层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。

  • 2、Web浏览器向Web服务器发送请求命令

一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令。

  • 3、Web浏览器发送请求头信息

浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。

  • 4、Web服务器应答

客户机向服务器发出请求后,服务器会客户机回送应答,HTTP/1.1 200 OK,应答的第一部分是协议的版本号和应答状态码。

  • 5、Web服务器发送应答头信息

正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。

  • 6、Web服务器向浏览器发送数据

Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。

  • 7、Web服务器关闭TCP连接

一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码:
Connection:keep-alive
TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

Https通信过程

1: 客户端通过发送 Client Hello 报文开始 SSL 通信。报文中包含客户端支持的 SSL 的指定版本、加密组件(Cipher Suite)列表(所使用的加密算法及密钥长度等)。
2、服务器可进行 SSL 通信时,会以 Server Hello 报文作为应答。和客户端一样,在报文中包含 SSL 版本以及加密组件。服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的。
3、之后服务器发送 Certificate 报文。报文中包含公开密钥证书。
4、最后服务器发送 Server Hello Done 报文通知客户端,最初阶段的 SSL 握手协商部分结束。
5、SSL 第一次握手结束之后,客户端以 Client Key Exchange 报文作为回应。报文中包含通信加密中使用的一种被称为 Pre-mastersecret 的随机密码串。该报文已用步骤 3 中的公开密钥进行加密。
6、接着客户端继续发送 Change Cipher Spec 报文。该报文会提示服务器,在此报文之后的通信会采用 Pre-master secret 密钥加密。
7、客户端发送 Finished 报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准。
8、服务器同样发送 Change Cipher Spec 报文。
9、服务器同样发送 Finished 报文。
10、服务器和客户端的 Finished 报文交换完毕之后,SSL 连接就算建立完成。当然通信会受到 SSL 的保护。从此处开始进行应用层协议的通信,即发送 HTTP 请求。
11、应用层协议通信,即发送 HTTP 响应。
12、 最后由客户端断开连接。断开连接时,发送 close_notify 报文。这之后再发送 TCP FIN 报文来关闭与 TCP的通信。

Https 对访问速度的影响

Https 对访问速度的影响主要来源为两方面:
1、协议交互所增加的网络 RTT(round trip time)。
2、加解密相关的计算耗时。

具体Https访问速度优化相关没有实际操作过,待有实操经验再来分享。

参考文献

HTTP与HTTPS对访问速度(性能)的影响
优化 Tengine HTTPS 握手时间
HTTPS 高性能传输优化详解
HTTP 必知必会的那些
HTTP协议通信过程
HTTPS通信过程

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。