【TLS】-TLS/SSL笔记
前言
主要是自己学习SSL流程时的辅助理解笔记。
包括数字证书前面为什么值得信任。
- 注意:多级CA还没有时间去记录,可能后期遇到再补。
参考:
李柱明博客:https://www.cnblogs.com/lizhuming/p/15487016.html
概念
理解为主,非官方描述。
对称加密
对称加密:
明文 P,加上密码 W 一混淆之后,变成密文 M。
如果不知道 W,则无法从 M 反推回 P。
例子:
- 异或。密钥与明文异或得到密文。异或的特点使得,密文与密钥进行异或,可以还原密文。

非对称加密
非对称加密:
非对称加密使用的密码有一对:
- 一个称为公钥 Pub
- 一个称为私钥 Priv
明文 P,经过公钥 Pub 加密后,变成密文 M。
密文 M 只有私钥 Priv 能解开。
若是结果私钥 priv 加密,就只由公钥 pub 能解开。
公钥
公钥:公钥,就是可以公开出去可以供所有人使用的密钥。
私钥:私钥,需要保护好。
密码:密码,需要保护好。
单向加密
单向加密:
- 无法反推的加密。
- 如 hash。常用于比较明文是否被篡改。
数字签名
知道公钥和私钥后。
基础
作用
SSL/TLS 协议是为了解决这三大风险而设计:
- 所有信息都是加密传播,第三方无法窃听。
- 具有校验机制,一旦被篡改,通信双方会立刻发现。
- 配备身份证书,防止身份被冒充。
SSL/TLS 模型

运作
SSL/TLS 协议的基本思路是采用 公钥加密法。
公钥加密法:即是客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。
问题&解答
如何保证公钥不被篡改?
- 解决:将公钥放在数字证书中。只要证书是可信的,公钥就是可信的。
公钥加密计算量太大,如何减少耗用的时间?
- 解决:每一次对话(session),客户端和服务器端都生成一个"对话密钥"(session key),用它来加密信息。由于"对话密钥"是对称加密,所以运算速度非常快,而服务器公钥只用于加密"对话密钥"本身,这样就减少了加密运算的消耗时间。
数字证书验证原理:
- 在握手阶段,服务端会把服务端的公钥放到 CA 颁发的数字证书中。
- CA 颁发数字证书,会给数字证书签名。
- 签名就是把数字证书经过 hash 算法得出 hash 值,然后用 CA 机构的私钥给该 hash 值加密,这个加密值就是签名。
- 服务端把数字证书、 CA 机构的签名和哪一个 CA 机构发送到客户端。
- 客户端在自己信任的 CA 列表中找到和服务端发过来的 CA 机构,说明客户端信任该机构。
- 然后客户端把数字证书结果相同的 hash 算法得出 hash 值,且使用该 CA 机构的公钥对服务端发来的签名进行解密,若两值相等,则说明证书可靠。
- 数字证书签名和验证如下图:

SSL 过程中数字证书内容:
- 内容本端公钥。
- 证书所有者。
- 证书的发布机构。
- 证书的有效期。
- 等等。
基本过程
- 客户端向服务器端索要并验证公钥。
- 双方协商生成"对话密钥"。
- 双方采用"对话密钥"进行加密通信。
前两步称为 握手阶段 (handshake)。
握手阶段
握手阶段涉及四次通信。
- 客户端发出请求(ClientHello)
- 服务器回应(SeverHello)
- 客户端回应
- 服务器的最后回应
握手阶段都是明文通信。
客户端发出请求(ClientHello)
客户端先向服务器发出加密通信的请求,主要向服务器提供以下信息:
- 支持的协议版本。
- 一个客户端生成的随机数,稍后用于生成"对话密钥"。
- 支持的加密方法,比如 RSA 公钥加密。
- 支持的压缩方法。
服务器回应(SeverHello)
服务器收到客户端请求后,向客户端发出回应,服务器的回应包含以下内容:
- 确认使用的加密通信协议版本。
- 一个服务器生成的随机数,稍后用于生成"对话密钥"。
- 确认使用的加密方法,比如 RSA 公钥加密。
- 服务器证书。
- 要求客户端提供客户端证书。(这个取决于服务器是否需要确认客户端的身份)
客户端回应
客户端收到服务器回应以后,首先验证服务器证书:
- 证书是否可信机构颁布;
- 证书中的域名与实际域名是否一致;
- 证书是否已经过期。
若证书有问题,可以停止握手操作。
若证书没问题,客户端就会从证书中取出服务器的公钥。
然后,向服务器发送下面三项信息:
- 一个随机数(pre-master key)。该随机数用服务器公钥加密,防止被窃听。
- 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
- 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的 hash 值,用来供服务器校验。
- 如果服务器要求客户端提供证书,客户端发送证书及相关信息。
小笔记:
- 握手阶段产生三个随机数。保证生成的密钥不会每次都一样。
- 三个随机数通过一个密钥导出器最终导出一个对称密钥。
- 三个随机数是因为双方都不能保证对方的随机数是真的随机,所以自己也产生一个随机数,这样就不能被猜出来。
服务器的最后回应
服务器收到客户端的第三个随机数 pre-master key 之后,计算生成本次会话所用的"会话密钥"。然后向客户端发送以下信息:
编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
服务器握手结束通知,表示服务器的握手阶段已经结束。
- 这一项同时也是前面发送的所有内容的 hash 值,用来供客户端校验。
握手结束后就可以继续 http 协议继续通信了。只不过是加密会话而已。
- ssl 作用在应用层与传输层之间,它并不晓得应用层的东西。不必理会 url、header、body,应用层传传下来的数据到达传输层前,只需要把整个数据包都加密就完事了。
HTTPS 流程图参考
简版

目前主流的 TLS 的握手过程

【TLS】-TLS/SSL笔记的更多相关文章
- 详解HTTPS、TLS、SSL
HTTPS.TLS.SSL HTTP也称作HTTP over TLS.TLS的前身是SSL,TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3.下 ...
- 详解 HTTPS、TLS、SSL、HTTP区别和关系
一.什么是HTTPS.TLS.SSL HTTP也称作HTTP over TLS.TLS的前身是SSL,TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL ...
- TLS与SSL之间关系——SSL已经被IEFT组织废弃,你可以简单认为TLS是SSL的加强版
TLS与SSL之间关系 原文地址:SSL vs. TLS - What's the Difference? from:https://juejin.im/post/5b213a0ae51d4506d4 ...
- Web通信协议:OSI、TCP、UDP、Socket、HTTP、HTTPS、TLS、SSL、WebSocket、Stomp
1 各层的位置 1.1 OSI七层模型全景图 OSI是Open System Interconnect的缩写,意为开放式系统互联. 1.2 五层网络协议 在七层的基础上, ...
- TLS就是SSL的升级版+网络安全——一图看懂HTTPS建立过程——本质上就是引入第三方监管,web服务器需要先生成公钥和私钥,去CA申请,https通信时候浏览器会去CA校验CA证书的有效性
起初是因为HTTP在传输数据时使用的是明文(虽然说POST提交的数据时放在报体里看不到的,但是还是可以通过抓包工具窃取到)是不安全的,为了解决这一隐患网景公司推出了SSL安全套接字协议层,SSL是基于 ...
- TLS and SSL
SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层.SSL通过互相认证.使用数字签名确保完整性.使用加密确保私密性,以实现客户 ...
- TLS、SSL、HTTPS以及证书
转自:http://www.cnblogs.com/kyrios/p/tls-and-certificates.html 最近在研究基于ssl的传输加密,涉及到了key和证书相关的话题,走了不少弯路, ...
- 网络协议相关面试问题-TLS与SSL握手
HTTPS是什么? HTTPS并不是一个单独的协议,而是对工作在一加密连接(SSL / TLS)上的常规HTTP协议.通过在TCP和HTTP之间加入TLS(Transport Layer Securi ...
- tls和ssl
一个存在于 SSL 3.0 协议中的新漏洞于被披露,通过此漏洞,第三方可以拦截通过采用 SSL 3.0 的服务器传输的重要信息. 问题出在哪里? 与此问题相关的不是 SSL 证书本身,而是进行加密处理 ...
随机推荐
- 洛谷P1803——凌乱的yyy(贪心)
题目描述 现在各大oj上有n个比赛,每个比赛的开始.结束的时间点是知道的. yyy认为,参加越多的比赛,noip就能考的越好(假的) 所以,他想知道他最多能参加几个比赛. 由于yyy是蒟蒻,如果要参加 ...
- PHP中国际化的字符串比较对象
在 PHP 中,国际化的功能非常丰富,包括很多我们可能都不知道的东西其实都非常有用,比如说今天要介绍的这一系列的字符排序和比较的功能. 排序 正常来说,如果我们对数组中的字符进行排序,按照的是字符的 ...
- dede新增字段调用方法
各位在使用{dede:channel }标签的时候,难免会遇到因为现在字段不能满足业务需求,需要新增的情况(具体怎么新增字段自行百度). 但是新增的字段通过DEDE的标签是不能直接使用的,现在博主介绍 ...
- Java基础系列(2)- Java开发环境搭建
JDK下载与安装 安装JDK 1.百度搜素JDK8,找到下载地址 2.下载电脑对应的版本 3.双击安装JDK 4.记住安装的路径,可以自定义,默认路径如图 卸载JDK 删除Java安装目录 删除环境变 ...
- vue实现事件代理(通过事件冒泡实现)
事件代理/事件委托以ul>li来模拟 使用冒泡的用法:使用冒泡的用法来实现事件代理 分离出来 动态根据索引添加类名:
- django 各项配置基本设置
setting中一些设置例子 mysql数据库连接设置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': ...
- python列表底层实现原理
Python 列表的数据结构是怎么样的? 书上说的是:列表实现可以是数组和链表.顺序表是怎么回事?顺序表一般是数组. 列表是一个线性的集合,它允许用户在任何位置插入.删除.访问和替换元素.列表实现是基 ...
- YbtOJ#493-最大分数【斜率优化dp,分治】
正题 题目链接:http://www.ybtoj.com.cn/contest/117/problem/1 题目大意 \(n\)个数的一个序列,给其中的一些数打上标记. 一个标记方案的贡献为\(s_1 ...
- Python3入门系列之-----json与字典转换
json JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写 JSON 函数 使用 JSON 函数需要导入 json 库:import js ...
- State Space Model Content
State Space Model 状态空间模型及其卡尔曼滤波技术 混合正态分布下的状态空间模型及其滤波