主页

引言

在上一篇博客中,我们通过《一文读懂TLS1.2协议](https://www.cnblogs.com/informatics/p/17433116.html)》详细介绍了TLS握手流程。

本文中,我们从实际应用出发,介绍如何使用TLS协议保护自己的网站服务。

TLS应用

TLS协议广泛应用于互联网中,以便保护通信实体信息交换的安全性。 TLS在网络协议中的位置:

TLS协议工作在传输层应用层之间,从上图中我们也可以了解到。TLS协议一种常见的应用就是:

HTTPS = HTTP + TLS  #用于保护http请求和响应的数据安全性

此外,在gRPC中的应用,我们称之为gRPCs

HTTPS网路通信抓包分析

下面我们通过示例代码wireshark抓包分析来展示tls协议是如何保护http数据安全性的。

在以下示例中,涉及到的工具有:

practical-crypto介绍

# 下载示例代码
➜ practical-crypto git:(master) git clone https://github.com/warm3snow/practical-crypto.git # 查看示例代码目录结构
➜ practical-crypto git:(master) tree tls
tls
├── gmtls #国密tls示例
├── notls #无tls保护http服务
│   └── notls.go
├── readme.md #帮助文档
├── tls1.2 # 使用tls1.2协议的http服务
│   └── tls1_2.go
├── tls1.3 # 使用tls1.3协议的http服务
│   └── tls1.3.go
└── tlsclient.go # http客户端,可以发起http或https请求

抓包软件启动

# 使用tcpdump进行抓包
# -i 指定网卡, lo0是本地回环网卡
# -w 指定输出文件
# port 指定端口, 以下端口号为8443对应我们http服务的监听端口
➜ sudo tcpdump -i lo0 -w capture.pcap port 8443

服务端启动

以启动tls1.2的https服务为例,如下:

# 切换到对应目录下
➜ cd tls/tls1.2 # 启动https服务
➜ go run tls1_2.go

客户端

以运行tls1.2的https客户端发送请求为例,如下:

# 切换到客户端目录下
➜ cd tls # 编译客户端程序
➜ go build -o tlsclient tlsclient.go # 查看客户端help文档
➜ ./tlsclient -h
Usage of ./tlsclient:
-addr string
addr (default "https://localhost:8443")
-skipVerify
skipVerify (default true)
-tlsVersion string
specified tls version (default "1.2") # 通过客户端发送tls1.2请求
➜ tlsClient -addr https://localhost:8443 -tlsVersion 1.2 -skipVerify true

无TLS的HTTP网络通信

捕获网络数据

首先我们看下在没有tls保护的情况下,http请求数据是如何在网络上传递的。打开三个命令行终端,分别运行:

  • 抓包软件
  • http服务端,程序位置tls/notls/notls.go
  • http客户端, 程序位置tls/tlsclient.go

其中,在抓包过程中需要注意:

  1. tcpdump不会自动结束,当客户端返回成功后,需要使用ctrl + c来强制终止
  2. tcpdump会将抓包的数据存储到xxx.pcap文件中,图中,我们制定了capture.pcap文件

wireshark分析

下面我们打开wirshark网络协议分析工具,并将得到的capture.pcap文件拖入wireshark:

分析结果

HOLY SHIT !!!, 从图中我们可以清晰的看到服务端返回的Hello, world!消息,数据以明文形式在网络上裸奔。

使用TLS1.2的HTTPS网络通信

捕获网络数据

我们接着看下在有tls保护的情况下,http请求数据是如何传递的。同样打开三个命令行终端并运行相关程序:

  • 抓包软件
  • http服务端,程序位置tls/tls1.2/tls_12.go
  • http客户端, 程序位置tls/tlsclient.go

运行程序需要注意:

  1. tcpdump的运行和终止无变化,与上文相同
  2. 运行客户端时,addr参数指定的地址需要使用https协议,tlsVersion需要指定为1.2(代表此次握手使用了tls1.2协议)

wireshark分析

同样我们将刚才tcpdump捕获的数据导入wireshark:

分析结果

从图中我们可以看到:

  • 客户端和服务端进行了完整的tls1.2握手流程
  • 客户端的请求以密文形式发送(包括请求体和请求头)
  • 服务端相应的数据以密文形式返回

结论

本文我们通过实际的例子,来对比分析了访问http和https服务的网络通信数据保护,通过分析结果我们可以看到访问http服务时,数据以明文形式传输,无安全性可言; 而采用了https的服务,在对外提供服务时,数据以密文形式传输,保证了通信数据的隐私性。

在实际应用中,我们应尽量使用https服务,降低数据泄漏的风险。

展望

本文主要通过实际例子介绍了tls1.2协议的具体应用以及安全保护效果,但同时在使用TLS1.2的HTTPS网络通信中wireshark分析章节我们也可以看到tls1.2协议虽然保护了通信数据的安全性,但是需要客户端和服务端进行2轮交互,降低了通信效率,在后续文章中,我们会进一步介绍tls1.3协议,该协议在安全性性能与tls1.2协议相比,具有很大的提升。

参考资料

TLS原理与实践(二)的更多相关文章

  1. WebSocket原理与实践(二)---WebSocket协议

    WebSocket原理与实践(二)---WebSocket协议 WebSocket协议是为了解决web即时应用中服务器与客户端浏览器全双工通信问题而设计的.协议定义ws和wss协议,分别为普通请求和基 ...

  2. [从Paxos到ZooKeeper][分布式一致性原理与实践]<二>一致性协议[Paxos算法]

    Overview 在<一>有介绍到,一个分布式系统的架构设计,往往会在系统的可用性和数据一致性之间进行反复的权衡,于是产生了一系列的一致性协议. 为解决分布式一致性问题,在长期的探索过程中 ...

  3. RPC原理与实践(二)----Thrift分层模型

    这一节我们从一下几个方面来讲一下Thrift的分层架构,按照官方的定义这是Thrift的网络栈,其中网络栈中分为一下几个部分,(由栈顶到栈底)server,processor,protocol,tra ...

  4. kafka原理和实践(二)spring-kafka简单实践

    系列目录 kafka原理和实践(一)原理:10分钟入门 kafka原理和实践(二)spring-kafka简单实践 kafka原理和实践(三)spring-kafka生产者源码 kafka原理和实践( ...

  5. 2017.2.9 深入浅出MyBatis技术原理与实践-第八章 MyBatis-Spring(二)-----配置文件详解

    深入浅出MyBatis技术原理与实践-第八章 MyBatis-Spring(二) ------配置文件详解 8.2 MyBatis-Spring应用 8.2.1 概述 本文主要讲述通过注解配置MyBa ...

  6. Spring Boot自动配置原理与实践(二)

    前言 在之前的博文(Spring Boot自动配置原理与实践(一))中,已经介绍了Spring boot的自动配置的相关原理与概念,本篇主要是对自动配置的实践,即自定义Starter,对原理与概念加深 ...

  7. Atitit 管理原理与实践attilax总结

    Atitit 管理原理与实践attilax总结 1. 管理学分类1 2. 我要学的管理学科2 3. 管理学原理2 4. 管理心理学2 5. 现代管理理论与方法2 6. <领导科学与艺术4 7. ...

  8. 嵌入式实时操作系统μCOS原理与实践任务控制与时间的解析

    /*************************************************************************************************** ...

  9. 《数字图像处理原理与实践(MATLAB版)》一书之代码Part6

    本文系<数字图像处理原理与实践(MATLAB版)>一书之代码系列的Part6,辑录该书第281至第374页之代码,供有须要读者下载研究使用.代码运行结果请參见原书配图,建议下载代码前阅读下 ...

  10. 《数字图像处理原理与实践(MATLAB版)》一书之代码Part2

    本文系<数字图像处理原理与实践(MATLAB版)>一书之代码系列的Part2(P43~80),代码运行结果请參见原书配图,建议下载代码前阅读下文: 关于<数字图像处理原理与实践(MA ...

随机推荐

  1. 剪粘板增强小工具(可多次Ctrl+V)

    前言 windows的剪贴板中存储是的最新一次的复制结果,比如先复制A,再复制B,C,在按下粘贴键时粘贴的是最后一次的结果C,在工作时有时候会遇到需要多次复制粘贴的情景,我就在思考有没有一款工具可以保 ...

  2. 未能加载文件或程序集“System.ValueTuple, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。

    一些老的项目在使用SAEA.Socket相关库后,程序本地测试正常,结果上传到服务器上后提示:未能加载文件或程序集"System.ValueTuple, Version=0.0.0.0, C ...

  3. 人工智能的新篇章:深入了解大型语言模型(LLM)的应用与前景

    人工智能的新篇章:深入了解大型语言模型(LLM)的应用与前景 LLM(Large Language Model)技术是一种基于深度学习的自然语言处理技术,旨在训练能够处理和生成自然语言文本的大型模型. ...

  4. UIE_Slim满足工业应用场景,解决推理部署耗时问题,提升效能。

    项目链接:fork一下即可 UIE Slim满足工业应用场景,解决推理部署耗时问题,提升效能! 如果有图片缺失查看原项目 UIE Slim满足工业应用场景,解决推理部署耗时问题,提升效能 在UIE强大 ...

  5. 从嘉手札<2023-11-20>

    写给十年如一日的偶像--Faker "我看了一下,觉得视频还不够清晰,等我换一个清晰点的摄像头再回来直播,不要走开~" 繁星满天,流光飞逝. 世界是一场盛大的表演, 舞台上熙熙攘攘 ...

  6. IDEA破解激活

    !!!不要使用最新2021.2.3以后的版本,没有30天免费试用.推荐使用2021年之前的版本!!! 1: IDEA安装后使用30天免费试用进入,然后找到图中位置点击 2: 点击下图链接下载破解jar ...

  7. (C语言)关于printf的新发现: 可以用字符串变量替代第一个字符串参数

    char a[] = "hello%d\n%dworld"; printf(a, 2, 3); //输出: //hello2 //2world 事情的起因是使用printf(&qu ...

  8. ABC 311 A - E

    ABC 311 A - E 不提供代码 A 题意:求一个字符串的第一个 ABC 最早出现的位置,可以打乱顺序,可以间隔 建立三个变量,然后以此判断即可,直到三种字符都出现就可以了 B 题意:给定每个人 ...

  9. 24.3 向量化异常VEH--《Windows核心编程》

    Windows 提供了向量化异常处理(vectored excepation handing,VEH)机制.程序可以注册一个函数,每当异常发送或者一个未处理异常脱离标准SEH的控制时,这个函数就会被调 ...

  10. NC20667 数学题

    题目链接 题目 题目描述 最近,华东交通大学ACM训练基地的老阿姨被一个数学问题困扰了很久,她希望你能够帮她解决这个问题. 这个数学问题是这样的,给你一个N,要求你计算 gcd(a,b)表示a和b的最 ...