TLS原理与实践(二)
主页
- 个人微信公众号:密码应用技术实战
- 个人博客园首页:https://www.cnblogs.com/informatics/
引言
在上一篇博客中,我们通过《一文读懂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数据安全性的。
在以下示例中,涉及到的工具有:
- tcpdump: 网络抓包软件,官网: http://www.tcpdump.org
- wireshark: 网络抓包和分析软件,官网: https://www.wireshark.org
- practical-crypto: 用于模拟https服务和客户端,github仓库 https://github.com/warm3snow/practical-crypto.git
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

其中,在抓包过程中需要注意:
- tcpdump不会自动结束,当客户端返回成功后,需要使用
ctrl + c来强制终止 - 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

运行程序需要注意:
- tcpdump的运行和终止无变化,与上文相同
- 运行客户端时,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协议相比,具有很大的提升。
参考资料
- tcpdump: http://www.tcpdump.org
- wireshark: https://www.wireshark.org
- practical-crypto: https://github.com/warm3snow/practical-crypto.git
TLS原理与实践(二)的更多相关文章
- WebSocket原理与实践(二)---WebSocket协议
WebSocket原理与实践(二)---WebSocket协议 WebSocket协议是为了解决web即时应用中服务器与客户端浏览器全双工通信问题而设计的.协议定义ws和wss协议,分别为普通请求和基 ...
- [从Paxos到ZooKeeper][分布式一致性原理与实践]<二>一致性协议[Paxos算法]
Overview 在<一>有介绍到,一个分布式系统的架构设计,往往会在系统的可用性和数据一致性之间进行反复的权衡,于是产生了一系列的一致性协议. 为解决分布式一致性问题,在长期的探索过程中 ...
- RPC原理与实践(二)----Thrift分层模型
这一节我们从一下几个方面来讲一下Thrift的分层架构,按照官方的定义这是Thrift的网络栈,其中网络栈中分为一下几个部分,(由栈顶到栈底)server,processor,protocol,tra ...
- kafka原理和实践(二)spring-kafka简单实践
系列目录 kafka原理和实践(一)原理:10分钟入门 kafka原理和实践(二)spring-kafka简单实践 kafka原理和实践(三)spring-kafka生产者源码 kafka原理和实践( ...
- 2017.2.9 深入浅出MyBatis技术原理与实践-第八章 MyBatis-Spring(二)-----配置文件详解
深入浅出MyBatis技术原理与实践-第八章 MyBatis-Spring(二) ------配置文件详解 8.2 MyBatis-Spring应用 8.2.1 概述 本文主要讲述通过注解配置MyBa ...
- Spring Boot自动配置原理与实践(二)
前言 在之前的博文(Spring Boot自动配置原理与实践(一))中,已经介绍了Spring boot的自动配置的相关原理与概念,本篇主要是对自动配置的实践,即自定义Starter,对原理与概念加深 ...
- Atitit 管理原理与实践attilax总结
Atitit 管理原理与实践attilax总结 1. 管理学分类1 2. 我要学的管理学科2 3. 管理学原理2 4. 管理心理学2 5. 现代管理理论与方法2 6. <领导科学与艺术4 7. ...
- 嵌入式实时操作系统μCOS原理与实践任务控制与时间的解析
/*************************************************************************************************** ...
- 《数字图像处理原理与实践(MATLAB版)》一书之代码Part6
本文系<数字图像处理原理与实践(MATLAB版)>一书之代码系列的Part6,辑录该书第281至第374页之代码,供有须要读者下载研究使用.代码运行结果请參见原书配图,建议下载代码前阅读下 ...
- 《数字图像处理原理与实践(MATLAB版)》一书之代码Part2
本文系<数字图像处理原理与实践(MATLAB版)>一书之代码系列的Part2(P43~80),代码运行结果请參见原书配图,建议下载代码前阅读下文: 关于<数字图像处理原理与实践(MA ...
随机推荐
- 强化学习基础篇【1】:基础知识点、马尔科夫决策过程、蒙特卡洛策略梯度定理、REINFORCE 算法
强化学习基础篇[1]:基础知识点.马尔科夫决策过程.蒙特卡洛策略梯度定理.REINFORCE 算法 1.强化学习基础知识点 智能体(agent):智能体是强化学习算法的主体,它能够根据经验做出主观判断 ...
- 7.6 Windows驱动开发:内核监控FileObject文件回调
本篇文章与上一篇文章<内核注册并监控对象回调>所使用的方式是一样的都是使用ObRegisterCallbacks注册回调事件,只不过上一篇博文中LyShark将回调结构体OB_OPERAT ...
- 《IDEA Plugin 开发手册》• 小傅哥.pdf | 年前整理的最后一本PDF资料
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 为什么?写写快乐的热门文章不好吗! 从开始准备成体系的编写 IDEA Plugin ...
- Python 字典与集合
字典(Dictionary) 字典介绍 字典是"键值对"的无序可变序列,字典中的每个元素都是一个"键值对",包含:"键对象"和"值 ...
- 【若归】背包dp做题笔记
前言: 现在决定未来,未来与过去无关.--波波 前置知识: dd_engi的背包九讲(新版转载) | 背包九讲--全篇详细理解与代码实现 背包问题 (附单调队列优化多重背包 | 背包问题入门(单调队列 ...
- JS Leetcode 70. 爬楼梯 题解分析,斐波那契数列与动态规划
本题来自LeetCode70. 爬楼梯,难度简单,属于一道动态规划的入门题,题目描述如下: 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬 ...
- Ubuntu/Centos 管理员权限获取
OS:Ubuntu 18.04.1 打开Terminal; 输入命令:sudo su; 屏幕上会回显要求输入当前用户密码的提示,输入密码即可获得管理员权限; 若想退出管理员权限可输入命令:su 用户名 ...
- 【Unity3D】灯光组件Light
1 灯光简介 在 Hierarchy 窗口右键,选择 Light,再选择具体的灯光类型,在 Inspector 窗口查看灯光组件如下: Type:灯光类型,主要有:Directional(平行光) ...
- 使用RBF神经网络实现函数逼近
python实现的RBF神经网络见:基于tensorflow的RBF神经网络案例 1 一元函数逼近 1.1 待逼近的函数 1.2代码 %%%%%%%%%%一元函数逼近%%%%%%%%%% clear, ...
- 盘点 Udemy 上最受欢迎的免费编程课程
之前给大家推荐过一些油管上的免费学习资源,如果您还没有看过的话可以点击这里前往. 今天再给大家推荐一批Udemy上超高质量并且免费的编程课程,有需要的小伙伴可以学起来了. 1. JavaScript ...