HTTPS SSL/TLS握手

HTTPS

安全超文本传输​​协议(HTTPS)是超文本传输​​协议(HTTP)的扩展。它用于在计算机网络上进行安全通信,并在Internet上广泛使用。 在HTTPS中,使用传输层安全性(TLS)或以前使用安全套接字层(SSL)对通信协议进行加密。因此,该协议也被称为使用TL/SSL的HTTP。

相对于HTTP,HTTPS有以下改进:

  • 所有信息都是加密传播,第三方无法窃听。
  • 具有校验机制,一旦被篡改,通信双方会立刻发现。
  • 配备身份证书,防止身份被冒充。

SSL/TLS握手

每个SSL/TLS连接都以“握手”开始–双方之间的协商明确了他们将如何进行的细节。

SSL握手的主要目的是为服务器和客户端之间的通信提供隐私和数据完整性。 在握手期间,服务器和客户端将交换建立安全连接所需的重要信息。

握手确定将使用哪种密码套件(cipher suite)来加密其通信,验证服务器并确定在开始实际的数据传输之前已经建立了安全连接。

幸运的是,所有这一切都在后台发生–每次将浏览器定向到安全站点时,都会进行复杂的交互以确保您的数据安全。

握手过程如下:

  • 客户端请求-ClientHello

    客户端将发送服务器启动HTTPS连接所需的信息。主要信息包括:

    • 客户端支持的SSL/TLS版本,例如: TLSv1.2。
    • 客户端支持的密码列表(cipher suites),例如: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA等。
    • 一个随机数(客户端随机数),该数字最终将与服务器随机值一起用于生成主密钥。
  • 服务器响应-ServerHello

    服务器将检查客户端Hello信息(如果未找到受支持的密码套件或SSL/TLS版本,则服务器将发送失败警报并关闭连接), 并选择服务器支持的相应配置(密码套件和SSL/TLS版本),然后进行响应,以继续进行握手, 主要响应信息包括:

    • 选择的SSL/TLS版本,例如: TLSv1.2。
    • 从客户端提供的密码列表中选择的密码套件,例如: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
    • 带有证书链的服务器证书,为了向连接提供身份验证,CA签署了SSL证书,该证书允许客户端验证证书是否合法
    • 一个随机数(服务器随机数),该数字最终将与客户端随机值一起使用以生成主密钥。
    • 服务器"已完成响应"消息。
  • 客户端校验

    客户端检查服务器证书的合法性,如果有问题(证书中的域名与实际域名不一致/证书过期),会提示访问者是否继续进行通信。 如果没有问题,客户端取出证书中的公钥。

  • 客户端回应

    客户端检将以下信息发给服务器:

    • 使用服务器公钥生成的随机数(Pre-master Key),只有服务器将具有相应的私钥来解密。
    • 更改密码规范 此消息通知服务器,将切换到加密通信,将使用刚刚协商的密钥和算法对“客户端已完成”消息之后的所有消息进行加密。
    • 客户端"已完成"消息。表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值。Finished消息被加密,并且是会话密钥保护的第一个数据

    第一项的随机数,是整个握手阶段的第三个随机数,又称"Pre-master Key"。有了它以后,客户端和服务器就同时有了三个随机数, 接着双方就用事先商定的加密方法,各自生成本次会话所用的同一把"会话密钥"。 通过随机数生成的密钥才会每次都不一样,从而确保密钥的随机和安全性。

  • 客户证书申请。这是可选步骤,其中服务器请求客户端的身份验证。此步骤可能用于网站(例如银行网站),在该网站中服务器必须在提供敏感信息之前确认客户端的身份。
  • 服务器对客户端的最终响应

    主要包含以下信息:

    • 更改密码规范消息。此消息通知客户端,服务器将开始使用刚刚协商的密钥来加密消息。
    • 服务器完成的消息。该消息也是前面发送的所有内容的hash值。如果客户端能够成功解密此消息并验证包含的哈希,则可以确保SSL/TLS握手成功,并且在客户端计算机上计算出的密钥与在服务器上计算出的密钥匹配。

这些步骤之后,SSL握手完成。双方现在都有一个会话密钥,并将开始与经过加密和身份验证的连接进行通信。