https 握手详解

本贴最后更新于 1974 天前,其中的信息可能已经渤澥桑田

0x00 什么是 https 协议

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的 HTTP 通道,简单讲是 HTTP 的安全版。即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 它是一个 URI scheme(抽象标识符体系),句法类同 http:体系。用于安全的 HTTP 数据传输。

0x01 HTTPS 和 HTTP 的区别

HTTPS 和 HTTP 的区别主要为以下四点:

  • https 协议需要到 ca 申请证书,一般免费证书很少,需要交费。
  • http 是超文本传输协议,信息是明文传输,https 则是具有安全性的 ssl 加密传输协议。
  • http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
  • http 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全。

0x02 SSL 协议

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

所以 SSL 所具备的功能是:保证传输数据的保密性、完整性,并且实现通信双方的身份认证。

在协议栈种位置如下:

SSL 协议是一个分层协议,共有两层组成。

高层协议包括:

  • SSL 握手协议
  • 改变加密约定协议
  • 报警协议

底层协议是 SSL 记录层协议,是一个简单的封装协议,用来记录协议的功能,保证协议的完整性,机密性。

0x03 SSL 握手

这里主要分析一下高层协议中的握手协议。

SSL 握手协议主要负责:

  • 算法协商
  • 身份验证
  • 确定密钥

为了很直观的看到它具体做了什么,采用 wireshark 抓包的方式来分析一次 Full Handshake,即全流程握手。

0x04 wireshark 抓包分析

接下来我们抓包进行分析:

1.我们打开 wireshark 软件,监视正在使用的网卡,然后通过浏览器访问 www.github.com 抓取完成后我们停止捕获。

2.在过滤器输入 ssl,过滤 ssl 协议,找到本机向 github.com 的 ip 地址发起的 client hello。

3.右键追踪,选择 ssl 流。

4.首先是 client hello,这个包携带着客户的 SSL 版本号,加密套件列表,压缩算法列表,客户端随机数,sessionid = 0,传送给服务器。

我们开始分析,首先展开 client hello 的 SSL,找到 Handshark。可以看到 client hello 里面包含的各项数据。

分别是:

  • SSL 版本号:TLS 1.2
  • 压缩算法 NULL
  • sessionid = 0
  • 密码套件如下

  • server name,可以看到是 github.com。

5.然后找到 server hello,这个包是服务器选择版本,确定要用的加密套件,压缩算法,计算 sessionid 以及随机数,发送给客户端。

同样展开 SSL:

我们可以看到各项对应数据被放在 server hello 中,比如 session ID,密码套件等。

并且我们看到,除了 server hello 部分,这个包还有服务器发向客户端的证书的前一部分。然后下一个包 TCP segment of a reassemble PDU,是证书的中间部分。

6.然后找到 Certificate,这一步是服务端将自己的证书下发给客户端,让客户端验证自己的身份,客户端验证通过后取出证书中的公钥。

而我们看到的包中内容呢是证书结尾部分,包括 GitHub 机构旗下 github.com 网站的证书及其颁发机构 DigiCert 的证书。

7.下一部分是 Server Key Exchange,用于将服务器的临时 ECDH 公钥传送给客户端。

8.之后是 Server Hello Done,此消息由服务器发送,以指示 ServerHello 和相关消息的结束。

发送此消息后,服务器将等待客户端响应。

9.客户端收到服务端传来的证书后,先从 CA 验证该证书的合法性,验证通过后取出证书中的服务端公钥,再生成一个随机数 Random3,再用服务端公钥非对称加密 Random3 生成 PreMaster Key。

然后我们看到下个包包含 Client Key Exchange, Change Cipher Spec, Hello Request, Hello Request

10.首先是 Client Key Exchange,上面客户端根据服务器传来的公钥生成了 PreMaster Key,Client Key Exchange 就是将这个 key 传给服务端。

11.Change Cipher Spec(Client),

这一步是客户端通知服务端后面再发送的消息都会使用前面协商出来的秘钥加密了。然后客户端发送握手验证报文确保消息的完整性。

12.Change Cipher Spec(Server)

这一步是服务端收到数据后,通知客户端后面再发送的消息都会使用加密。

13.Encrypted Handshake Message,表示服务器端的 SSL 成功结束,发送握手验证报文确保消息的完整性。

14.下面开始正式交换数据。

所以总的过程如下图所示:

以上就是整个 SSL 握手过程,也是加密算法的典型应用之一。

  • 安全

    安全永远都不是一个小问题。

    189 引用 • 813 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • ihqn

    图片都看不了啊

推荐标签 标签

  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    51 引用 • 226 回帖
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 623 关注
  • CodeMirror
    1 引用 • 2 回帖 • 116 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    108 引用 • 54 回帖 • 2 关注
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖 • 5 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    89 引用 • 113 回帖 • 1 关注
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    148 引用 • 257 回帖
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    21 引用 • 140 回帖 • 25 关注
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    20 引用 • 245 回帖 • 229 关注
  • 负能量

    上帝为你关上了一扇门,然后就去睡觉了....努力不一定能成功,但不努力一定很轻松 (° ー °〃)

    85 引用 • 1201 回帖 • 450 关注
  • Electron

    Electron 基于 Chromium 和 Node.js,让你可以使用 HTML、CSS 和 JavaScript 构建应用。它是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目,兼容 Mac、Windows 和 Linux,它构建的应用可在这三个操作系统上面运行。

    15 引用 • 136 回帖 • 8 关注
  • Bug

    Bug 本意是指臭虫、缺陷、损坏、犯贫、窃听器、小虫等。现在人们把在程序中一些缺陷或问题统称为 bug(漏洞)。

    77 引用 • 1741 回帖 • 1 关注
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    915 引用 • 931 回帖
  • RYMCU

    RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。

    4 引用 • 6 回帖 • 38 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 545 关注
  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    28 引用 • 108 回帖
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖 • 13 关注
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    11 引用 • 5 回帖 • 562 关注
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    25 引用 • 215 回帖 • 163 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 232 回帖 • 5 关注
  • danl
    62 关注
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    284 引用 • 247 回帖 • 177 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    85 引用 • 895 回帖
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 111 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 179 关注