霜巧
霜巧
文章目录
  1. 1 HTTPS概述
  2. 2 HTTPS方案
  3. 3 建立安全传输
  4. 4 SSL握手
  5. 5 服务器证书

HTTPS苦旅之初步了解

HTTPS苦旅之初步了解

随着国内网络环境的持续恶化,各种篡改和劫持层出不穷,越来越多的网站选择了全站 HTTPS。此外,免费提供证书服务的 Let’s Encrypt 项目也已正式开放,HTTPS 很快就会成为 WEB 必选项,我们的跨境电商用的就是这个证书服务。先来看看HTTPS到底是何方神圣吧。

1 HTTPS概述

HTTPS就是在安全的传输层上发送的HTTP。HTTPS不会将未加密的HTTP报文直接发送给TCP进行传输,而是先将其发送给一个安全层SSL(Secure Sockets Layer 安全套接层)或TLS(Transport Layer Security 安全传输层),对其进行加密,如图1所示:

alt text

图1 HTTP安全传输层

2 HTTPS方案

现在安全HTTPS是可选的,因此对Web服务器发起请求时,需要有一种方式来告知Web服务器去执行HTTP协议的安全版本,这个方案就是在URL中实现。

通常情况下,非安全HTTP的URL前缀为http:

http://www.kaola.com

在安全HTTPS协议中,URL的前缀为https:

https://www.kaola.com

一个客户端(比如Web浏览器)对某Web资源请求执行某事务时,它会去检查URL的协议:

  • 如果URL的协议为HTTP,客户端就会打开一条默认情况下到服务器80端口的连接,并向其发送老的HTTP命令,如图2(a);
  • 如果URL的协议为HTTPS,客户端就会打开一条默认情况下到服务器443端口的连接,然后与服务器“握手”,以二进制格式与服务器交换一些SSL安全参数,附上加密的HTTP命令,如图2(b)所示。
alt text

图2 HTTP和HTTPS端口号

SSL是个二进制协议,与HTTP完全不同,其流量通常是由443端口承载的。如果SSL和HTTP流量都从80端口到达,大部分Web服务器会将二进制的SSL流量理解为错误的HTTP并关闭连接。

3 建立安全传输

在未加密HTTP中,客户端会打开一条到Web服务器80端口的TCP连接,发送一条请求报文,接收一条响应报文,关闭连接,如图3(a)所示。

由于SSL安全层的存在,HTTPS中这个过程会略为复杂一些。在HTTPS中,客户端首先打开一条到Web服务器443端口的连接。一旦建立了TCP连接,客户端和服务器就会初始化SSL层,对加密参数进行沟通,并交换密钥。握手完成之后,SSL初始化就完成了,客户端就可以将请求报文发送给安全层了。再将这些报文发送给TCP之前,要先对其进行加密。如图3(b)所示。

alt text
图3 HTTP和HTTPS事务

4 SSL握手

在通过网络传输任何已加密的HTTP数据之前,SSL已经发送了一组握手数据来建立通信连接了,如图4所示。

alt text
图4 (简化版)SSL握手

这是SSL握手的简化版本。根据SSL的使用方式,握手过程可能会复杂一些,但总的思想就是这样。

5 服务器证书

SSL支持双向认证,将服务器证书承载回客户端,再将客户端的证书回送给服务器。而现在,浏览时并不经常使用客户端证书。大部分用户甚至都没有自己的客户端证书。服务器可以要求使用客户端证书,但实际中很少出现这种情况。比如有些组织的内部网络会使用客户端证书来控制员工对信息的访问。

另一方面,安全HTTPS事务总是要求使用服务器证书的。在一个Web服务器上执行安全事务,比如提交信用卡信息时,用户总是希望是在与自己所认识的那个组织对话。由知名权威机构签发的服务器证书可以帮助用户在发送信用卡或私人信息之前评估对服务器的信任度。

服务器证书是一个显示了组织的名称、地址、 服务器DNS域名以及其他信息的X.509 v3派生证书。用户和其所用的客户端软件可以检查证书,以确保所有的信息都是可信的。