PKI 体系(二)-Https & 双端认证

超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为 HTTP over TLS,HTTP over SSL 或 HTTP Secure)是一种透过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。这个协议由网景公司(Netscape)在 1994 年首次提出,随后扩展到互联网上。

Https 协议默认支持双向认证,只是一般浏览器 - 服务器架构下不会进行开启。

SSL/TLS 协议

传输层安全性协议(英语:Transport Layer Security,缩写作 TLS),及其前身安全套接层(Secure Sockets Layer,缩写作 SSL)是一种安全协议,目的是为互联网通信,提供安全及数据完整性保障。网景公司(Netscape)在 1994 年推出首版网页浏览器,网景导航者时,推出 HTTPS 协议,以 SSL 进行加密,这是 SSL 的起源。IETF 将 SSL 进行标准化,1999 年公布第一版 TLS 标准文件。随后又公布 RFC 5246 (2008 年 8 月)与 RFC 6176 (2011 年 3 月)。在浏览器、电子邮件、即时通信、VoIP、网络传真等应用程序中,广泛支持这个协议。主要的网站,如 Google、Facebook 等也以这个协议来创建安全连接,发送数据。目前已成为互联网上保密通信的工业标准。

SSL 包含记录层(Record Layer)和传输层,记录层协议确定传输层数据的封装格式。传输层安全协议使用 X.509 认证,之后利用非对称加密演算来对通信方做身份认证,之后交换对称密钥作为会话密钥(Session key)。这个会谈密钥是用来将通信两方交换的数据做加密,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听。

TLS 协议采用 C/S 架构模型,用于在两个应用程序间透过网络创建起安全的连接,防止在交换数据时受到窃听及篡改。

TLS 协议的优势是与高层的应用层协议(如 HTTP、FTP、Telnet 等)无耦合。应用层协议能透明地运行在 TLS 协议之上,由 TLS 协议进行创建加密通道需要的协商和认证。应用层协议传送的数据在通过 TLS 协议时都会被加密,从而保证通信的私密性。

TLS 协议是可选的,必须配置客户端和服务器才能使用。主要有两种方式实现这一目标:一个是使用统一的 TLS 协议通信端口(例如:用于 HTTPS 的端口 443);另一个是客户端请求服务器连接到 TLS 时使用特定的协议机制(例如:邮件、新闻协议和 STARTTLS)。一旦客户端和服务器都同意使用 TLS 协议,他们通过使用一个握手过程协商出一个有状态的连接以传输数据 [1]。通过握手,客户端和服务器协商各种参数用于创建安全连接:

* 当客户端连接到支持TLS协议的服务器要求创建安全连接并列出了受支持的密码组合(加密密码算法和加密哈希函数),握手开始。
* 服务器从该列表中决定加密和散列函数,并通知客户端。
* 服务器发回其数字证书,此证书通常包含服务器的名称、受信任的证书颁发机构(CA)和服务器的公钥。
* 客户端确认其颁发的证书的有效性。
* 为了生成会话密钥用于安全连接,客户端使用服务器的公钥加密随机生成的密钥,并将其发送到服务器,只有服务器才能使用自己的私钥解密。
* 利用随机数,双方生成用于加密和解密的对称密钥。这就是TLS协议的握手,握手完毕后的连接是安全的,直到连接(被)关闭。如果上述任何一个步骤失败,TLS握手过程就会失败,并且断开所有的连接。

SSL&TLS 原理

协议组成

协议分为三个部分

  • 握手协议(Handshake protocol)
  • 记录协议(Record protocol)
  • 警报协议(Alert protocol)

握手协议

握手协议是客户机和服务器用 SSL 连接通信时使用的第一个子协议,握手协议包括客户机与服务器之间的一系列消息。SSL 中最复杂的协议就是握手协议。该协议允许服务器和客户机相互验证,协商加密和 MAC 算法以及保密密钥,用来保护在 SSL 记录中发送的数据。握手协议是在应用程序的数据传输之前使用的。

握手协议数据格式

每个握手协议包含以下 3 个字段

  1. Type:表示 10 种消息类型之一
  2. Length:表示消息长度字节数
  3. Content:与消息相关的参数

握手协议数据格式

握手协议流程

握手协议分为 4 个阶段

  1. 建立安全能力
  2. 服务器鉴别与密钥交换
  3. 客户机鉴别与密钥交换
  4. 完成

握手协议流程

阶段 1:建立安全能力

SSL 握手的第一阶段启动逻辑连接,建立这个连接的安全能力。首先客户机向服务器发出 client hello 消息并等待服务器响应,随后服务器向客户机返回 server hello 消息,对 client hello 消息中的信息进行确认。
ClientHello 客户发送 CilentHello 信息,包含如下内容:

  1. 客户端可以支持的 SSL 最高版本号
  2. 一个用于生成主秘密的 32 字节的随机数。(等会介绍主秘密是什么)
  3. 一个确定会话的会话 ID。
  4. 一个客户端支持的加密算法列表。
  5. 一个客户端可以可以支持的压缩算法列表

ServerHello 服务器用 ServerHello 信息应答客户,包括下列内容:

  1. 一个 SSL 版本号。取客户端支持的最高版本号和服务端支持的最高版本号中的较低者。
  2. 一个用于生成主秘密的 32 字节的随机数。(客户端一个、服务端一个)
  3. 会话 ID
  4. 从客户端的密码套件列表中选择的一个加密算法
  5. 从客户端的压缩方法的列表中选择的压缩方法

建立安全能力

阶段 2:服务器鉴别和密钥交换

服务器启动 SSL 握手第 2 阶段,是本阶段所有消息的唯一发送方,客户机是所有消息的唯一接收方。该阶段分为 4 步:

  1. 证书:服务器将数字证书和到根 CA 整个链发给客户端,使客户端能用服务器证书中的服务器公钥认证服务器。
  2. 服务器密钥交换(可选):这里视密钥交换算法而定
  3. 证书请求(可选):服务端可能会要求客户自身进行验证。
  4. 服务器握手完成:第二阶段的结束,第三阶段开始的信号

服务器鉴别和密钥交换

服务器密钥交换:1 和 2 是基于密钥交换方法的。SSL 中密钥交换算法有 6 种:无效(没有密钥交换)、RSA、匿名 Diffie-Hellman、暂时 Diffie-Hellman、固定 Diffie-Hellman、Fortezza。
在阶段 1 过程客户端与服务端协商的过程中已经确定使哪种密钥交换算法。
如果协商过程中确定使用 RSA 交换密钥,那么过程如下图:
服务器密钥交换

阶段 3:客户机鉴别和密钥交换

客户机启动 SSL 握手第 3 阶段,是本阶段所有消息的唯一发送方,服务器是所有消息的唯一接收方。该阶段分为 3 步:

  1. 证书(可选):为了对服务器证明自身,客户要发送一个证书信息,这是可选的,在 Tomcat 中可以配置强制客户端证书认证。(服务器端请求了客户端证书才会有此步骤)
  2. 客户机密钥交换(Pre-master-secret):这里客户端将预备主密钥发送给服务端,注意这里会使用服务端的公钥进行加密。
  3. 证书验证(可选),对预备秘密和随机数进行签名,证明拥有(1)证书的公钥。(服务器端请求了客户端证书才会有此步骤)

客户机鉴别和密钥交换

阶段 4:完成

握手完成后,客户端和服务器端后面的信息使用主密钥进行对称加 / 解密

完成

Https

HTTP 协议和安全协议同属于应用层(OSI 模型的最高层),具体来讲,安全协议工作在 HTTP 之下,运输层之上:安全协议向运行 HTTP 的进程提供一个类似于 TCP 的 Socket,供进程向其中注入报文,安全协议将报文加密并注入运输层 Socket;或是从运输层获取加密报文,解密后交给对应的进程。严格地讲,HTTPS 并不是一个单独的协议,而是对工作在一加密连接(TLS 或 SSL)上的常规 HTTP 协议的称呼。

HTTPS 报文中的任何东西都被加密,包括所有报头和荷载。除了可能的选择密文攻击(参见限制小节)之外,一个攻击者所能知道的只有在两者之间有一连接这一事实。