使用wireshark抓包了解https

背景

  • Https即HTTP over TLS。为避免Http明文传输带来的安全隐患,我们可以对传输的数据进行加密,考虑到性能问题,使用对称加密算法。
  • 客户端需要知道服务端使用的密钥及加密算法,如何保证密钥的安全传输呢?这里可以使用非对称加密算法,使用服务端的公钥pubKey来加密传输密钥key。
  • 公钥是明文传输的,中间人仍然可以使用自己的公钥加密key欺骗客户端。

  • 使用wireshark抓包了解https


  • TLS使用证书进行身份认证,保证服务端是受信任的,同时证书中使用数字签名防止被篡改。这样保证了pubKey的安全传输
  • TLS使用协商机制来选择对称加密使用的算法
  • 抓包分析

    1. 选择使用的网卡,设置捕捉过滤器host blog.csdn.net (也可以不设置,抓包后通过显示过滤器查看),开始抓取。


    使用wireshark抓包了解https

    2. 使用curl https://blog.csdn.net/u010648018/article/details/103447167发起一次https请求

    3. 可以看到,首先是tcp的三次握手,然后是tls协商加密算法与密钥交换过程

    使用wireshark抓包了解https

    4. Client Hello,客户端向服务端发送一个随机数和支持的加密算法

    使用wireshark抓包了解https

    5. Server Hello,服务端向客户端发送随机数和选择的加密算法(ECDHE)

    使用wireshark抓包了解https

    1. Certificate, Server Key Exchange, Server Hello Done
    • Certificate 服务端向客户端发送证书链。证书用于身份认证,其中包含服务端公钥PubKey
    • Server Key Exchange 根据上面具体选择的加密算法(ECDHE)准备生成密钥需要的一些参数(premaster)。(RSA算法没有该步骤)
    • Server Hello Done 表明服务端的Hello消息发送完毕
    使用wireshark抓包了解https

    1. Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
    • Client Key Exchange 在验证服务端发送证书可信后,生成加密算法所需的一些参数
    • Change Cipher Spec 告诉服务端以后要使用选择的加密算法加密数据
    • Encrypted Handshake Message 根据之前客户端和服务端生成的随机数、加密算法所需的一些参数生成会话密钥key,对之前的握手消息的Hash值和Mac值进行加密,来验证该加密密钥是否可用。服务端以相同的方法生成会话密钥解密该消息,校验其中的Hash值和Mac值。
    使用wireshark抓包了解https

    1. Change Cipher Spec, Encrypted Handshake Message
    • Change Cipher Spec 告诉客户端以后要使用该加密算法来加密数据
    • Encrypted Handshake Message 使用会话密钥key加密之前的握手消息的Hash值和Mac值,发送给客户端校验
    使用wireshark抓包了解https

    9. 双方校验完成,发送加密的应用数据

    使用wireshark抓包了解https

    整体流程

    使用wireshark抓包了解https


    分享到:


    相關文章: