zoukankan      html  css  js  c++  java
  • 抓包分析SSL/TLS连接建立过程【总结】

    1、前言

      最近在倒腾SSL方面的项目,之前只是虽然对SSL了解过,但是不够深入,正好有机会,认真学习一下。开始了解SSL的是从https开始的,自从百度支持https以后,如今全站https的趋势越来越强烈,互联网对安全的认识越来越深入。本文根据自己的实际情况,对SSL链接建立做个总结。SSL相关的非对称加密和加密,涉及到公钥、私钥、证书、对称密钥,这些非常复杂,本文不会涉及。本文重点介绍SSL的握手过程,客户端和服务端的步骤,通过wireshark抓包分析整个过程。

    2、基本概念

       SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。

       TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。

    TLS是在SSL的基础上标准化的产物,目前SSL3.0与TLS1.0保持一致的,二者是并列关系,只是大家习惯称呼SSL。注明的web服务nginx默认支持的就是TLS1.0、TLS1.1、TLS1.2协议。调用的openssl库中,对应的就是ssl3_acceptt函数。

      SSL/TLS位于传输层和应用层之间,应用层数据不再直接传递给传输层,而是传递给SSL层,SSL层对从应用层收到的数据进行加密,并增加自己的SSL头。

    3、握手过程

      我使用nginx搭建了一个https的服务,nginx的默认ssl cipher为HIGH:!aNULL:!MD5; 不同的cipher 决定了握手的交互过程。chrome浏览器支持的cipher如下所示:

    cipher的格式为:认证算法_密钥交换算法_加密算法_ 摘要算法

    首先看看最基本的基于RSA的密钥协商算法,配置的ssl sipher为 AES256-GCM-SHA256。

    使用wireshark抓包分析,抓包如下所示:

     从上面报文可以看出,SSL建立过程如下图所示:

     使用椭圆曲线(ECDHE)算法作为密钥交换算法,配置ssl ciper为:,交互流程如下所示:

    抓包看如下:

     从上面报文可以看出,SSL建立过程如下图所示:

     相比RSA算法而言,握手过程多了一个server key exchange步骤

     RSA算法服务端没有Server key Exchange。

    4、参考资料

    http://www.ruanyifeng.com/blog/2014/09/illustration-ssl.html

    https://blog.cloudflare.com/keyless-ssl-the-nitty-gritty-technical-details/

  • 相关阅读:
    hive与hbase整合
    待重写
    hive DML
    【知识强化】第六章 总线 6.1 总线概述
    【知识强化】第五章 中央处理器 5.1 CPU的功能和基本结构
    【知识强化】第四章 指令系统 4.3 CISC和RISC的基本概念
    【知识强化】第四章 指令系统 4.2 指令寻址方式
    【知识强化】第四章 指令系统 4.1 指令格式
    【知识强化】第三章 存储系统 3.6 高速缓冲存储器
    【知识强化】第三章 存储系统 3.5 双口RAM和多模块存储器
  • 原文地址:https://www.cnblogs.com/Anker/p/6082966.html
Copyright © 2011-2022 走看看