Golang(十)TLS 相关知识(一)基本概念原理
0. 前言
- 最近参与一个基于 BitTorrent 协议的 Docker 镜像分发加速插件的开发,主要参与补充 https 协议
- 学习了 TLS 相关知识,下面对之前的学习做一下简单总结
- 参考文献:TLS完全指南系列文章
1. 基本原理
- TLS 依赖两种加密技术:
- 对称加密(symmetric encryption)
- 非对称加密(asymmetric encryption)
1.1 对称加密
- 加密方和解密方共享同一个秘钥 K:
加密:C = E(M, K)
解密:M = D(C, K)
- 攻击者且听到 K 后就可以作为一个中间人伪装成任意一个对象,实现中间人攻击
1.2 非对称加密
- 非对称加密利用成对的两个秘钥:K1 和 K2,加密者使用一个加密,解密者可以利用另一个解密:
加密:C = E(M, K1)
解密:M = D(C, K2)
- 解密者生成一对秘钥,私钥保存,公钥公开
- 但是中间人可以截获公钥,然后自己生成一对秘钥,把自己的公钥发送给加密者
- 用自己的私钥解密加密者的信息,然后用解密者的公钥加密发送给解密者
- 或者中间人收到解密者公钥加密的消息后,对消息破坏篡改,再发送给解密者
- 导致解密者无法正确解析密文
1.3 数字签名
- 光靠非对称加密很难确定信息发送方身份,因此发明了数字签名
- 根据数字签名,接收方接收到信息之后,可以判断信息是否被破坏过,如果没有被破坏,就可以正确的解码。如果被破坏,就直接丢弃
- 数字签名可以保证对信息的任何篡改都可以被发现,从而保证信息传输过程中的完整性
- 数字签名是实现的关键技术就是哈希技术
- 加密者先对将要传输的信息进行哈希,得到一串独一无二的信息摘要
- 哈希函数往往是不可逆的,无法根据哈希后的内容推断原文;同时,不同的原文,会造成不同的哈希结果,并且结果的差异是巨大甚至毫无规律的
- 对原文进行再细微的修改,得到的哈希后的内容都会与未经修改的原文的哈希内容大相径庭,保证消息内容不被篡改
- 然后,加密者将信息摘要,用自己的私钥进行加密
- 这样就保证只有加密者的公钥才能对信息摘要进行正确的解码,进而保证信息摘要一定是来自加密者
- 加密后的信息摘要实际就是数字签名的内容
- 最后,加密者再将数字签名附加到原文信息的后面,使用解密者公钥加密后发送给解密者
- 解密者接收到信息之后,首先使用自己的私钥解密报文,分别获得原文和数字签名
- 利用加密者公钥对数字签名进行解密,得到信息摘要,如果成功解码,就说明数字签名是来自加密者
- 然后,解密者将信息原文进行哈希得到自己的信息摘要,与解码数字签名得到的信息摘要进行对比,如果相同,就说明原文信息完整,没有被篡改,反之,则确认信息被破坏了
- 目前为止,利用公钥和私钥以及数字签名,可以保证信息传输过程中的私密性和完整性
- 但还存在一个问题:就是公钥分发的问题,上述中间人劫持公钥的问题并没有解决
- 这个问题就需要数字证书和 CA 来解决了
1.4 数字证书和 CA
- 每个加密者或者接受者都有自己的私钥和公钥,如何判断对方的公钥是真实代表对方的是一个问题
- 实际我们会引入一个第三方机构,每个人都找这个真实可信的独立的第三方,请求真伪鉴别服务
- 第三方机构就是 CA(Certification Authorith,证书颁发机构)会给解密者创建一个数字证书
- “用户首先产生自己的密钥对,并将公钥及部分个人身份信息传送给认证中心
- 认证中心在核实身份后,将执行一些必要的步骤,以确信请求确实由用户发送而来
- 然后,认证中心将发给用户一个数字证书,该证书内包含用户的个人信息和他的公钥信息,同时还附有认证中心的签名信息”
- 公钥和身份信息(域名或者IP)合起来就是 CSR(certificate signing request,身份证申请)
- 实际过程可以看做 CA 利用自己的私钥对 CSR 加密,作为数字签名
- 然后 CSR 连同 CA 的数字签名构成数字证书,也称为 CRT(CA signed certificate)
- 在之后的发送中加密者将数字证书附在数字签名后
- 接收者收到后用 CA 的公钥解密获得,加密者的身份和公钥
- 攻击者不能通过 CA 的验证,无法获取证书,解密者接受后判断数字证书包含的身份信息不是加密者,因此会拒绝
- 但是如果选择信任了错误的 CA,也会被攻击,通常浏览器中会内置靠谱 CA 的身份证(公钥)
1.4 信任链、根身份证和自签名
- CA 也分为不同级别,需要逐级验证
- 比如 CA1 不被大家信任,于是可以将身份信息和公钥发送给受信任的 CA2,获得自己的数字证书
- CA1 在给其他人签署数字证书时,会在后面附上自己的数字证书
- 这样接受者首先利用 CA2 的公钥验证 CA1,获得 CA1 的公钥后再验证发送者
- 这样逐级签署数字证书,形成了一条信任链
- 最终的根节点就是自签名证书,如 CA2 可以用自己的私钥把自己的公钥和域名加密,生成证书
1.5 应用场景:https 协议
- 首先,浏览器向服务器发送加密请求
- 服务器将网页加密,连同自身的数字证书发送给浏览器
- 浏览器收到返回验证服务器身份,同时服务器也可以验证浏览器身份
- 浏览器验证服务器是通过 TLS 身份验证实现的,服务器验证浏览器是通过输入用户名密码实现的,通常服务器不会验证浏览器身份
- 客户端(浏览器)的“证书管理器”,有“受信任的根证书颁发机构”列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内
- 如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出警告
- 如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告
- 如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息
2. 小结
- 本文整理了一些数字签名、数字证书的知识,之前也有了解,但是一些概念细节理解不很清晰
- 现在做了整理,方便以后复习。也是对后面的铺垫
- 欢迎各位批评指正
3. 参考文献
Golang(十)TLS 相关知识(一)基本概念原理的更多相关文章
- Golang(十二)TLS 相关知识(三)理解并模拟简单代理
0. 前言 前面的介绍我们理解了数字签名等知识,同时学习了 OpenSSL 生成私钥和证书并验证 之前提过我们基于 BitTorrent 协议开发了一个 docker 镜像分发加速插件 中间涉及到了配 ...
- Golang(十一)TLS 相关知识(二)OpenSSL 生成证书
0. 前言 接前一篇文章,上篇文章我们介绍了数字签名.数字证书等基本概念和原理 本篇我们尝试自己生成证书 参考文献:TLS完全指南(二):OpenSSL操作指南 1. OpenSSL 简介 OpenS ...
- 来了解一下Mysql索引的相关知识:基础概念、性能影响、索引类型、创建原则、注意事项
索引的基础概念索引类似于书籍的目录,要想找到一本书的某个特定主题,需要先查找书的目录,定位对应的页码:存储引擎使用类似的方式进行数据查询,先去索引当中找到对应的值,然后根据匹配的索引找到对应的数据行 ...
- 客户端相关知识学习(十二)之iOS H5交互Webview实现localStorage数据存储
前言 最近有一个需求是和在app中前端本地存储相关的,所以恶补了一下相关知识 webView开启支持H5 LocalStorage存储 有些时候我们发现写的本地存储没有起作用,那是因为默认WebVie ...
- 【Stream—7】NetworkStream相关知识分享
一.NetworkStream的作用 和先前的流有所不同,NetworkStream的特殊性可以在它的命名空间中得以了解(System.Net.Sockets),聪明的你马上就会反应过来:既然是在网络 ...
- 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...
- listener监听器的相关知识
从别人的博客上我学习了listener的相关知识现在分享给大家 1.概念: 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上 ...
- 【转】java NIO 相关知识
原文地址:http://www.iteye.com/magazines/132-Java-NIO Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的 ...
- 【转载】前端面试“http全过程”将所有HTTP相关知识抛出来了...
原文:前端面试“http全过程”将所有HTTP相关知识抛出来了... 来一篇串通,一个http全过程的问题,把所有HTTP相关知识点都带过一遍 http全过程 输入域名(url)-->DNS映射 ...
随机推荐
- 3、Ext.NET 1.7 官方示例笔记-表单
表单[Form],就是向客户收集资料的窗口,用户在表单填写好各种信息,然后提交到服务器,服务器接收并保存到数据库里. 表单的字段类型很多,我们从最简单的开始吧. 1.1 .先开始组合框吧(ComboB ...
- OpenCV.Net基于傅里叶变换进行文本的旋转校正
本文描述一种利用OpenCV及傅里叶变换识别图片中文本旋转角度并自动校正的方法,由于对C#比较熟,因此本文将使用OpenCVSharp. 文章参考了http://johnhany.net/2013/1 ...
- 英语NanyangJade南阳玉NanyangJade独山玉
南阳玉NanyangJade又叫做独山玉,独山玉,因产于河南南阳的独山而得名,亦称“南阳玉”. 独山玉是中国四大名玉之一,有南阳翡翠之称,独山玉是一种黝帘石化斜长岩,由多种矿物组成,属多色玉器. 据文 ...
- 基于Morphia实现MongoDB按小时、按天聚合操作
MongoDB按照天数或小时聚合 需求 最近接到需求,需要对用户账户下的设备状态,分别按照天以及小时进行聚合,以此为基础绘制设备状态趋势图. 实现思路是启动定时任务,对各用户的设备状态数据分别按照小时 ...
- PowerShell美化
转载自Powershell 美化 --oh-my-posh,作者Zvonimir. PowerShell默认的主题太丑了,用过OhMyZsh之后是无法忍受这种丑陋的,幸好PowerShell有对应的O ...
- 常用的linux命令大全
之前做过两年的运维,用过很多命令,深切体会到某些linux命令熟练掌握后对效率提升有多大.举个简单的例子,在做了研发后经常会有跑一些数据,对于结果数据的处理,我们的产品同学一般都习惯于用excel做统 ...
- 系统级性能分析工具 — Perf【转】
转自:https://blog.csdn.net/zhangskd/article/details/37902159 版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn ...
- mysql_innodb存储引擎的优化
采用innodb作为存储引擎时的优化 innodb_buffer_pool_size 如果用 Innodb,那么这是一个重要变量.相对于 MyISAM 来说,Innodb对于 buffer size ...
- 每次都能让人头大的 Shader -- 从整合说起
之前也说过引擎能不能提供一个一般化的开发环境给使用者, 这样使用者只需要指定他要的开发环境, 就能用它最熟悉的方式去写Shader了. 从提供者的角度来看, 因为有太多的应用场景无法确定, 所以提供无 ...
- ant+jmeter+jenkins自动环境搭建
一.安装前准备 1.JDK:jdk-8u131-windows-x64 2.jmeter工具:apache-jmeter-5.1.1 3.ANT工具:apache-ant-1.10.3 4.jenki ...