zoukankan      html  css  js  c++  java
  • TLS/SSL 协议

    ClientHello

    在一次新的握手流程中,ClientHello消息总是第一条消息。这条消息将客户端的功能和首选项传送给服务器。客户端会在新建连接后,希望重新协商或者响应服务器发起的重新协商请求(由HelloRequest消息指示)时,发送这条消息。

    Wireshark 抓取ClientHello消息:

    • Version
      协议版本(protocol version)指示客户端支持的最佳协议版本。从低到高依次 SSLv2、SSLv3、TLSv1、TLSv1.1、TLSv1.2,当前基本不再使用低于 TLSv1 的版本;

    • Random
      随机数(random)字段包含32字节的数据。当然,只有28字节是随机生成的;剩余的4字节包含额外的信息,受客户端时钟的影响。4个字节以Unix时间格式记录了客户端的协调世界时间(UTC)。协调世界时间是从1970年1月1日开始到当前时刻所经历的秒数,那么时间是不断的上涨的,通过前4字节填写时间方式,有效的避免了周期性的出现一样的随机数。使得“随机”更加“随机”。随机数是用来生成对称密钥的。
      在握手时,客户端和服务器都会提供随机数。这种随机性对每次握手都是独一无二的,在身份验证中起着举足轻重的作用。它可以防止重放攻击,并确认初始数据交换的完整性。

    • Session ID
      在第一次连接时,会话ID(session ID)字段是空的,这表示客户端并不希望恢复某个已
      存在的会话。在后续的连接中,这个字段可以保存会话的唯一标识。服务器可以借助会话ID在自己的缓存中找到对应的会话状态。
      如果Session id length有值,对于 SSL 2.0 Session id length 0~16字节,其后的版本扩大到32字节。本报文中Session id length是0,后面就没有跟Session id,直接是Cipher suit length。
      Session id并不一定是32字节,RFC规定可以0~32字节。只是Session id由服务器生成,服务器普遍采用OpenSSL,而OpenSSL基本只生成32字节的session id,如果碰到其他字节长度的Session id,切莫认为是异常client hello。

    • Cipher Suites

    密码套件(cipher suite)块是由客户端支持的所有密码套件组成的列表,该列表是按优先级顺序排列的。加密套件列出了客户端能够支持的加密方式、算法等信息。不同的加密套件性能不一样,安全性不一样,也导致了SSL交互报文的不一样。

    例如,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 各字段含义:

    字段 TLS ECDHE RSA WITH AES_256_GCM SHA384
    解释 代表TLS协议 对称加密密钥交换算法 非对称密钥算法,也就是公钥/私钥算法 分割作用 对称加密算法 哈希算法

    示例1:
    TLS_RSA_WITH_RC4_128_SHA1,它表示,密钥交换使用RSA,身份认证算法用RSA(证书是身份认证一部分,我们还需要用RSA去验证证书),对称加密算法使用RC4,摘要算法使用SHA1。

    示例2:
    TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA1,它表示,密钥交换算法使用ECDHE(短暂椭圆曲线),身份认证算法使用ECDSA,对称加密算法使用AES_128_CBC,摘要算法使用SHA1。

    客户端把自己所支持的加密套件全部发送给服务器,服务器会从中选择一个加密套件。每个加密套件用2字节表示。每个加密套件用2字节表示,这里一共30个加密套件,所以理所当然的,Cipher Suits Length是30 * 2 = 60字节。

    • Compression
      客户端可以提交一个或多个支持压缩的方法。默认的压缩方法是null,代表没有压缩。
    • Extensions
      扩展(extension)块由任意数量的扩展组成。这些扩展会携带额外数据。TLS扩展是一种通用目的的扩展机制,使用这种机制可以在不修改协议本身的条件下为TLS协议增加功能。
      例如:Server_name(SNI):

    SSL存在验证证书的时候,有这么一个判断:比较“浏览器输入的地址”和“获取的证书的名称”。如果一样,那么接着验证,如果不一样,那么认为证书是不可信的。

    [参考文献]

    1. 百度百科 SSL
    2. 《HTTPS 权威指南:在服务器和Web应用上部署SSL/TLS和PKI》
    3. SSL/TLS握手过程 https://www.cnblogs.com/barrywxx/p/8570715.html
    4. TLS/SSL 协议详解 (9) Client hello https://blog.csdn.net/mrpre/article/details/77867439
    5. 例说图解TCP/IP协议族--TLS篇(1)抓包分析SSL/TLS握手 https://blog.csdn.net/Wendy019900107/article/details/90042622
  • 相关阅读:
    利用正则表达式,完成参数的替换
    使用python读取yaml文件
    python+unittet在linux与windows使用的区别
    python发送requests请求时,使用登录的token值,作为下一个接口的请求头信息
    jmeter线程组之间传参
    requests:json请求中中文乱码处理
    ddt源码修改:HtmlTestRunner报告依据接口名显示用例名字
    使用openpyxl的styles,实现写入值时加背景色
    批量数据请求接口
    locust参数化
  • 原文地址:https://www.cnblogs.com/sxiszero/p/11153112.html
Copyright © 2011-2022 走看看