通过curl请求示例详解HTTPS协议

基于HTTPS通信是当前互联网最通用便捷的通信方式,简单理解来看可以视为HTTP协议 + SSL/TLS协议,通过一个curl的示例阐述一下HTTPS协议。

特性:

  • 信息加密传输,防止窃听风险
  • 具有校验机制,防止篡改风险
  • 配备身份证书,防止冒充风险

版本变更

  • SSL1.0 1994年,未发布
  • SSL2.0 1995年,有严重漏洞
  • SSL3.0 1996年,大规模应用,有风险现在不建议
  • TLS1.0 1999年(别称SSL3.1)
  • TLS1.1 2006年(别称SSL3.2)
  • TLS1.2 2008年,2011年修订(别称SSL3.3)

原理

公钥放在数字证书,验证证书可信,即公钥可信,采用公钥加密,服务器收到后,私钥解密,考虑到加密计算量,公钥将对话密钥加密,而其他的信息则采用对话密钥进行对称加密,尽量提升性能。

  • 客户端向服务端索要并验证公钥
  • 双方生成“对话密钥”
  • 双方采用对话密钥加密通信

curl分析HTTPS请求时间

HTTPs耗时 = TCP握手 + SSL握手, 因为涉及到一些加密,及多了几次握手交互,可以看到的时要多于平常时间的3-5倍,当然这个和机器性能相关。

curl分析HTTPS请求过程

curl –trace 命令 可以记录请求的详情,我们就用它来了解一下https整个过程,命令如下:

  • 客户端请求ClientHello

客户端主要向服务器提供以下信息:
1. 支持的协议版本,比如TLS 1.0版。
2. 一个客户端生成的随机数,稍后用于生成”对话密钥”。
3. 支持的加密方法,比如RSA公钥加密。
4. 支持的压缩方法。

curl第一步请求如下

  • 服务端响应SeverHello

服务器的回应包含以下内容:
1. 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。
2. 一个服务器生成的随机数,稍后用于生成”对话密钥”。
3. 确认使用的加密方法,比如RSA公钥加密。
4. 服务器证书。

还有一种形式是服务端会校验客户端的证书,比如金融类一般金融机构以前网银key即包含一张客户端证书

  • 客户端回应
  1. 一个随机数。该随机数用服务器公钥加密,防止被窃听。
  2. 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
  3. 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验。

三个随机数,生成会话密钥。 此外,如果前一步,服务器要求客户端证书,客户端会在这一步发送证书及相关信息。

  • 服务器的最后回应
  1. 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
  2. 服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验。

curl整个请求过程:

参考:SSL/TLS协议运行机制的概述

0条留言