自Web诞生以来,我们所接触的互联网时代,都有可能存在信息的截断,而SSL协议及其后代TLS提供了加密和安全性,使现代互联网安全成为可能。

这些协议已有将近二十多年的历史,其特点是不断更新,旨在与日趋复杂的攻击者保持同步。

什么是SSL!什么是TLS!

SSL代表安全套接字层,该协议是由Netscape于1990年代中期开发的,Netscape是当时最受欢迎的Web浏览器。SSL 1.0从未向公众发布,而SSL 2.0具有严重的缺陷。1996年发布的SSL 3.0进行了彻底的改进,为后续工作奠定了基础。

而TLS与SSL,当一版本于1999年发布时,它由Internet工程任务组(IETF)进行了标准化,并被赋予了一个新名称:传输层安全性( TLS)。

正如TLS规范指出的那样,“此协议与SSL 3.0的区别并不明显。” 因此,TLS和SSL并不是真正的问题。而是,这两者形成了一系列不断更新的协议,并且经常被合并为SSL / TLS。

这样我们就明白了TLS(传输层安全性)只是SSL的更新,更安全的版本。目前已经升级到TLS1.3版本,TLS协议对所有类型的Internet通信进行加密。最常见的是网络流量;

简而言之,它们是保持Internet连接安全并保护两个系统之间发送的任何敏感数据的标准技术,可防止犯罪分子读取和修改所传输的任何信息,包括潜在的个人详细信息。

SSL/TLS握手过程

握手过程非常复杂,并且协议允许有多种变体。以下步骤提供了一个大致的概述。

第一

  • 客户端与服务器联系并请求安全连接。服务器以密码套件列表(即创建加密连接的算法工具包)答复

  • 客户端将其与其自己的受支持密码套件列表进行比较,选择一个,然后让服务器知道它们都将使用它。


第二

  • 服务器提供其数字证书,该数字证书是由第三方机构颁发的确认服务器身份的电子文档。包含服务器的公共加密密钥等等。

  • 客户端收到证书后,便会确认证书的真实性。

第三

  • 客户端和服务器使用服务器的公共密钥,建立会话密钥,这两个会话密钥将用于会话的其余部分以加密通信。有几种技术可以做到这一点。

  • 客户端可以使用公共密钥对随机数进行加密,然后将其发送到服务器进行解密,然后双方都可以使用该数字来建立会话密钥。

  • 或者,两方可以使用所谓的Diffie-Hellman密钥交换来建立会话密钥。

TLS1.2和TLS1.3比较

TLS1.2它也允许使用较旧的加密技术,以支持较旧的计算机。不幸的是,这使它容易受到攻击,在中间人攻击中,黑客拦截了通信中的数据包,并在读取或更改数据包后将其发送出去。

幸运的是,TLS1.3通过抛弃对旧加密系统的支持,填补了许多此类漏洞。使通信中的数据包受到了保护。

什么是SNI

Server Name Indication (SNI) 是TLS协议(以前称为SSL协议)的扩展,该协议在HTTPS中使用。它包含在TLS/SSL握手流程中,以确保客户端设备能够看到他们尝试访问的网站的正确SSL证书。该扩展使得可以在TLS握手期间指定网站的主机名或域名 ,而不是在握手之后打开HTTP连接时指定。

SNI的技术原理

SNI通过让客户端发送虚拟域的名称作为TLS协商的ClientHello消息的一部分来解决此问题。这使服务器可以及早选择正确的虚拟域,并向浏览器提供包含正确名称的证书。


这样要说一下,服务器名称指示(SNI)有效负载未加密,因此客户端尝试连接的服务器的主机名对于被动的窃听者是可见的。

TLS的SNI扩展有什么作用?

  • Web服务器通常负责多个主机名–或域名。如果网站使用HTTPS 则每个主机名将具有其自己的SSL证书。
  • 在HTTPS中,先有TLS握手,然后才能开始HTTP对话。如果没有SNI,客户端将无法向服务器指示正在与之通信的主机名。
  • 如果服务器可能为错误的主机名生成SSL证书。那么SSL证书上的名称与客户端尝试访问的名称不匹配,则客户端浏览器将返回错误信息,并通常会终止连接。
  • 通过 SNI,拥有多虚拟机主机和多域名的服务器就可以正常建立 TLS 连接了。

下面,我们就开始对TLS协议的SNI进行解析。

TLS协议的SNI识别

这里给出的只是一部分代码实现。

int main(int argc, char* argv[])
{char errbuf[1024];pcap_t *desc = 0;char *filename = argv[1];if (argc != 2){printf("usage: ./dissect_tls [pcap file]\n");return -1;}return 0;
}

编译运行:

在客户端到服务端方向的 ClientHello 包中,提取 SNI 扩展字段中的 SNI_NAME 字段,通过数据包偏移量进行逐步匹配得到 SNI_NAME。对 SNI_NAME 进行规则匹配。

总结

这篇文章只是对SSL/TLS做一些简单的介绍,想通过更多认识,可以阅读官方的RFC文档,对于SNI(Server Name Indication)是 TLS 的扩展,它主要是用来解决一个服务器拥有多个域名的情况。通过 SNI,拥有多虚拟机主机和多域名的服务器就可以正常建立 TLS 连接了。

欢迎关注微信公众号【程序猿编码】,需要SSL/TLS源码和报文的添加本人微信号(17865354792)

SSL / TLS协议解析!SNI 识别相关推荐

  1. SSL/TLS 协议简介与实例分析

    作者:drinkey 以前读RFC时总结的一篇文章,主要介绍了SSL/TLS协议的相关知识,包括协议本身以及简单的密码学概念,以及用实例解析了HTTP over SSL的协商过程,在最后简要列出了SS ...

  2. SSL / TLS协议中数字签名与hash算法的联系

    今天要为大家介绍的是哈希算法,在介绍SHA之前,只有了解什么是SHA,我们才清楚SSL证书如何使用哈希来形成数字签名.那么什么是哈希呢? HASH算法将任意长度的二进制值映射为较短的固定长度的二进制值 ...

  3. 假如让你来设计SSL/TLS协议,你要怎么设计呢?

    本文分享自华为云社区<假如让你来设计SSLTLS协议>,作者:元闰子. 前言 说起网络通信协议,相信大家对 TCP 和 HTTP 都很熟悉,它们可以说是当今互联网通信的基石.但是,在网络安 ...

  4. 车联网通信安全之 SSL/TLS 协议

    前言 在汽车出行愈加智能化的今天,我们可以实现手机远程操控车辆解锁.启动通风.查看车辆周围影像,也可以通过 OTA(空中下载技术)完成升级车机固件.更新地图包等操作,自动驾驶技术更是可以让车辆根据路面 ...

  5. SSL/TLS协议原理与证书签名多种生成方式实践指南

    本章目录: 0x00 前言简述 CA 认证原理 PKI 公钥基础设施 0x01 自签名SSL证书生成 1.在线(脚本)生成 2.OpenSSL 生成 3.CFSSL 生成 0x03 cfssl 使用实 ...

  6. SSL/TLS协议信息泄露漏洞(CVE-2016-2183)修复

    SSL/TLS协议信息泄露漏洞(CVE-2016-2183) 详细描述 TLS是安全传输层协议,用于在两个通信应用程序之间提供保密性和数据完整性. TLS, SSH, IPSec协商及其他产品中使用的 ...

  7. http和https的区别 与 SSL/TLS协议运行机制的概述

    http和https的区别 与 SSL/TLS协议运行机制的概述 参考1 1 http 是不使用的SSL/TSL的通信通道 窃听风险:第三方获取通信内容 篡改风险:修改通信内容 冒充风险:冒充他人身份 ...

  8. 简单了解SSL/TLS协议

    今天小编就为大家带来一篇关于SSL/TLS协议的文章.小编觉得挺不错的,为此分享给大家做个参考.一起跟随小编过来看看吧.  TLS名为传输层安全协议(Transport Layer Protocol) ...

  9. SSL/TLS协议运行机制的概述

    1. 作用 不使用SSL/TLS的HTTP通信,就是不加密的通信.所有信息明文传播,带来了三大风险: (1)窃听风险(eavesdropping):第三方可以获知通信内容. (2)篡改风险(tampe ...

  10. 聊聊HTTPS和SSL/TLS协议

    要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 2. 大致了解 HTTP 和 TCP 的关系(尤其是"短连接 ...

最新文章

  1. php date 转换 string_php将时间差转换为字符串提示
  2. 《速读ES7》新增特性目录列表
  3. Nacos安装详细过程
  4. 双层玻璃窗的功效模型matlab,数学建模实例双层玻璃的功效
  5. 超长正整数加法 c语言,两个超长正整数的加法
  6. Neo4j下载(linux系统)
  7. AVATR阿维塔11维修手册电路图技术资料
  8. elk报错:[syslogs] index has exceeded [1000000]
  9. AUC、KS值、PSI值理解
  10. 阿里云ecs服务器买完后可以更换操作系统么?
  11. 管理的常识(2):什么是领导
  12. 关机或重新启动电脑勾选再次登录时重新打开窗口导致无法上网
  13. MATLAB的交互式界面 简易设计
  14. python编辑器windows_windows下sublime Text 3 做Python编辑器 详细配置
  15. LaTeX中插入两个并排的图片
  16. JAVA日记之SpringJdbcTemplate/声明式事务控制 ----喝最烈的酒.
  17. 《Python基础教程》第5章 条件、循环及其他语句
  18. 异地数据库同步解决方案
  19. linux远程桌面x11,Ubuntu系统安装X11VNC实现远程可视化桌面操作
  20. 2022年软考初级网络管理员备考指南

热门文章

  1. 怎么用cmd打开python
  2. SignalR 循序渐进
  3. ERROR ITMS-90022 ERROR ITMS-90096
  4. Vmware安装MacOS提示请选择您要安装的macOS的磁盘
  5. 猎头是怎么找到合适候选人的?
  6. 书单 | 振聋发聩,撼世经典!总有那么一些书经得住时间的考验
  7. 获取最新中国行政区划
  8. python 小说 云_python爬小说
  9. 苹果CMSv10插件/本地解析播放器-videojs解析 整合苹果cmsV10程序
  10. Cannot assign requested address问题总结