HTTPS构建安全通讯、HTTPS通讯流程

 2017年01月30日    399     声明


HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer),即:安全套接字层上的HTTP协议,简单的说就是安全的HTTP协议。相比HTTP来说,HTTPS使用TLS/SSL对传输层数据进行加密,并使用CA证书对站点身份进行认证,所以其相对更安全。

  1. HTTPS概述
  2. HTTP的问题与方案
  3. HTTPS(TLS/SSL)通讯流程

1. HTTPS概述

在HTTP协议通讯过程中,客户端(浏览器)和服务器之间以明文的形式进行信息传递。由于没有数据加密及身份验证,如果攻击者截取了客户端和服务器之间的传输报文,就可直接读取、修改传输内容,或模拟客户端、服务器伪造传输信息,对信息安全造成威胁。

为了解决HTTP协议的安全缺陷,网景(Netscape)公司在1994年研发HTTPS技术,并应用其内置浏览器上,用于身份验证与信息加密。HTTPS在HTTP的基础上加入了SSL,以SSL/TLS基础为HTTP的构建一个安全的数据传输层,并通过CA证书来验证服务器身份。


2. HTTP的问题与方案

2.1 HTTP的问题

不使用SSL/TLS的HTTP通讯过程中,存在以下问题:

  • 信息可窃听 - 报文明文传输,第三方截取后可以直接读取传输内容
  • 信息可篡改 - 没有较验机制,传输内容可被修改
  • 身份可冒充 - 第三方可模拟通讯双方参与通信


2.2 HTTPS所解决的问题

信任问题(身份认证)

一般的HTTPS通讯,只要求验证服务器身份。HTTPS服务器需要从证书颁发机构CA(Certificate Authority)申请一个数字证书。证书内容会包括:签证机构信息、公钥用户信息、公钥、权威机构的签字和有效期等等。证书的格式和验证方法普遍遵循X.509国际标准。服务器与建立正式连接前,客户端会通过握手获取该证书,只能证书通过验证后,客户端才会信任该主机。

而部分高安全级别的HTTPS通讯也要求验证客户端身份,这时要求客户端用户名、密码外,还要有一个经CA认证过的身份,如:银行客户端的U盾等。客户端-服务器双方也通过握手获取对方公钥,其握手过程与普通HTTPS握手过程有所差异,不在本文讨论范围、不多赘述。

防止通讯数据泄密和篡改

在HTTPS通讯过程,要求服务器有一个证书。其主要目的在于,客户端验证服务器端的身份。而服务器和客户端的通讯内容都是经过会话密钥加密的,其主要过程为:

  • 客户端产生一个对称的密钥(会话密钥),服务器通过证书来交换密钥,这就是TLS/SSL的握手过程
  • 客户端-服务器双方通过会话密钥加密通讯内容,建立安全通讯。由于通讯内容是经过加密的,这样即使被截获或篡改


3. HTTPS(TLS/SSL)通讯流程

HTTPS在基于SSL建立会话前,会经历4次握手过程以获取会话密钥。流程如下:

HTTPs 通讯流程

1. 客户端请求(ClientHello)

客户端向服务器发送会话请求,这一步称为ClientHelloClientHello中包括以下内容:

  • 一个随机数,其后将用于生成会话密钥
  • 客户端所支持的加密算法
  • 客户端所支持的协议版本、压缩方法
  • 主机名,即要请求的网址(TLS中扩充内容,早期的SSL没有这一部分,所以一台主机只能有一个域名)

2. 服务器响应(SeverHello)

服务器收到请求后,向客户端做响应。响应用内容包括:

  • SeverHelloSeverHello包括以下内容:
    • 一个随机数,其后将用于生成会话密钥
    • 服务器所支持的加密算法
  • 服务器CA证书(含公钥)
  • SeverHello结束符

3. 客户端验证证书,发送会话密钥

客户端对收到的服务端证书进行验证,验证内容包括:证书是否由可信机构颁布、证书中的域名与实际域名是否一致、证书是否已经过期等。

验证失败,则显示警告信息

验证成功,则做以下操作:

  • 生成一个主密钥,其后将做为会话密钥
  • 使用从证书中提取的公钥对主密钥进行加密
  • 将加密后的主密钥发送到服务器

在这一步中,客户端向服务器发送内容还包括:

  • 编码改变通知,表示之后的信息都会使用双方商定的加密方法和密钥进行加密
  • 客户端握手结束通知,也做为服务器较验哈希值

4. 服务器获取会话密钥,并通知客户端

服务器收到客户端响应值后,会使用私钥解密出会话密钥。并向客户端最后响应,响应内容包括:

  • 编码改变通知,表示之后的信息都会使用双方商定的加密方法和密钥进行加密
  • 服务端握手结束通知,也做为客户较验哈希值

5. 双方使用会话密钥进行加密通讯


参考: