前言

主要是自己学习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 协议的基本思路是采用 公钥加密法

公钥加密法:即是客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。

问题&解

  1. 如何保证公钥不被篡改?

    • 解决:将公钥放在数字证书中。只要证书是可信的,公钥就是可信的。
  2. 公钥加密计算量太大,如何减少耗用的时间?

    • 解决:每一次对话(session),客户端和服务器端都生成一个"对话密钥"(session key),用它来加密信息。由于"对话密钥"是对称加密,所以运算速度非常快,而服务器公钥只用于加密"对话密钥"本身,这样就减少了加密运算的消耗时间。
  3. 数字证书验证原理:

    • 在握手阶段,服务端会把服务端的公钥放到 CA 颁发的数字证书中。
    • CA 颁发数字证书,会给数字证书签名。
    • 签名就是把数字证书经过 hash 算法得出 hash 值,然后用 CA 机构的私钥给该 hash 值加密,这个加密值就是签名。
    • 服务端把数字证书、 CA 机构的签名和哪一个 CA 机构发送到客户端。
    • 客户端在自己信任的 CA 列表中找到和服务端发过来的 CA 机构,说明客户端信任该机构。
    • 然后客户端把数字证书结果相同的 hash 算法得出 hash 值,且使用该 CA 机构的公钥对服务端发来的签名进行解密,若两值相等,则说明证书可靠。
    • 数字证书签名和验证如下图:
  4. SSL 过程中数字证书内容:

    1. 内容本端公钥
    2. 证书所有者
    3. 证书的发布机构
    4. 证书的有效期
    5. 等等。

基本过程

  1. 客户端向服务器端索要并验证公钥。
  2. 双方协商生成"对话密钥"。
  3. 双方采用"对话密钥"进行加密通信。

前两步称为 握手阶段handshake)。

握手阶段

握手阶段涉及四次通信。

  • 客户端发出请求(ClientHello)
  • 服务器回应(SeverHello)
  • 客户端回应
  • 服务器的最后回应

握手阶段都是明文通信。

客户端发出请求(ClientHello)

客户端先向服务器发出加密通信的请求,主要向服务器提供以下信息:

  1. 支持的协议版本。
  2. 一个客户端生成的随机数,稍后用于生成"对话密钥"。
  3. 支持的加密方法,比如 RSA 公钥加密。
  4. 支持的压缩方法。

服务器回应(SeverHello)

服务器收到客户端请求后,向客户端发出回应,服务器的回应包含以下内容:

  1. 确认使用的加密通信协议版本。
  2. 一个服务器生成的随机数,稍后用于生成"对话密钥"。
  3. 确认使用的加密方法,比如 RSA 公钥加密。
  4. 服务器证书。
  5. 要求客户端提供客户端证书。(这个取决于服务器是否需要确认客户端的身份

客户端回应

客户端收到服务器回应以后,首先验证服务器证书:

  • 证书是否可信机构颁布;
  • 证书中的域名与实际域名是否一致;
  • 证书是否已经过期。

若证书有问题,可以停止握手操作。

若证书没问题,客户端就会从证书中取出服务器的公钥。

然后,向服务器发送下面三项信息:

  1. 一个随机数(pre-master key)。该随机数用服务器公钥加密,防止被窃听。
  2. 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
  3. 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的 hash 值,用来供服务器校验。
  4. 如果服务器要求客户端提供证书,客户端发送证书及相关信息。

小笔记:

  • 握手阶段产生三个随机数。保证生成的密钥不会每次都一样。
  • 三个随机数通过一个密钥导出器最终导出一个对称密钥。
  • 三个随机数是因为双方都不能保证对方的随机数是真的随机,所以自己也产生一个随机数,这样就不能被猜出来。

服务器的最后回应

服务器收到客户端的第三个随机数 pre-master key 之后,计算生成本次会话所用的"会话密钥"。然后向客户端发送以下信息:

  1. 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。

  2. 服务器握手结束通知,表示服务器的握手阶段已经结束。

    • 这一项同时也是前面发送的所有内容的 hash 值,用来供客户端校验。

握手结束后就可以继续 http 协议继续通信了。只不过是加密会话而已。

  • ssl 作用在应用层与传输层之间,它并不晓得应用层的东西。不必理会 url、header、body,应用层传传下来的数据到达传输层前,只需要把整个数据包都加密就完事了。

HTTPS 流程图参考

  • 简版

  • 目前主流的 TLS 的握手过程

【TLS】-TLS/SSL笔记的更多相关文章

  1. 详解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.下 ...

  2. 详解 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 ...

  3. TLS与SSL之间关系——SSL已经被IEFT组织废弃,你可以简单认为TLS是SSL的加强版

    TLS与SSL之间关系 原文地址:SSL vs. TLS - What's the Difference? from:https://juejin.im/post/5b213a0ae51d4506d4 ...

  4. Web通信协议:OSI、TCP、UDP、Socket、HTTP、HTTPS、TLS、SSL、WebSocket、Stomp

    1      各层的位置 1.1      OSI七层模型全景图 OSI是Open System Interconnect的缩写,意为开放式系统互联. 1.2      五层网络协议 在七层的基础上, ...

  5. TLS就是SSL的升级版+网络安全——一图看懂HTTPS建立过程——本质上就是引入第三方监管,web服务器需要先生成公钥和私钥,去CA申请,https通信时候浏览器会去CA校验CA证书的有效性

    起初是因为HTTP在传输数据时使用的是明文(虽然说POST提交的数据时放在报体里看不到的,但是还是可以通过抓包工具窃取到)是不安全的,为了解决这一隐患网景公司推出了SSL安全套接字协议层,SSL是基于 ...

  6. TLS and SSL

    SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层.SSL通过互相认证.使用数字签名确保完整性.使用加密确保私密性,以实现客户 ...

  7. TLS、SSL、HTTPS以及证书

    转自:http://www.cnblogs.com/kyrios/p/tls-and-certificates.html 最近在研究基于ssl的传输加密,涉及到了key和证书相关的话题,走了不少弯路, ...

  8. 网络协议相关面试问题-TLS与SSL握手

    HTTPS是什么? HTTPS并不是一个单独的协议,而是对工作在一加密连接(SSL / TLS)上的常规HTTP协议.通过在TCP和HTTP之间加入TLS(Transport Layer Securi ...

  9. tls和ssl

    一个存在于 SSL 3.0 协议中的新漏洞于被披露,通过此漏洞,第三方可以拦截通过采用 SSL 3.0 的服务器传输的重要信息. 问题出在哪里? 与此问题相关的不是 SSL 证书本身,而是进行加密处理 ...

随机推荐

  1. Sentry 监控 - Dashboards 事件数据可视化大屏

    系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...

  2. C++吃金币小游戏

    上图: 游戏规则:按A,D键向左和向右移动小棍子,$表示金币,0表示炸弹,吃到金币+10分,吃到炸弹就GAME OVER. 大体思路和打字游戏相同,都是使用数组,refresh和run函数进行,做了一 ...

  3. TP5数据库数据变动日志记录设计

    根据网友的设计进行了部分调整: 用户分为管理员admin表和用户user表 记录操作表数据 增删改: insert/delete/update <?php /** * OperateLog.ph ...

  4. setTimeout 与setInterval的区别

    setTimeout(code,millisec) 方法用于在指定的毫秒数后调用函数或计算表达式 setInterval(code,millisec) 方法可按照指定的周期(以毫秒计)来调用函数或计算 ...

  5. P7324-[WC2021]表达式求值【dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P7324 题目大意 给一个只包含\(m\)个值的表达式,\(<\)表前后取最小值,\(>\)表前后取最大 ...

  6. virtualbox 桥接模式网络配置虚拟机之间通讯以及虚拟机联网

    一般来说桥接模式可以解决所有的网络问题 网卡选择 [root@HELLO network-scripts]# cat ifcfg-eth0 TYPE="Ethernet" PROX ...

  7. 多图详解万星 Restful 框架原理与实现

    rest框架概览 我们先通过 go-zero 自带的命令行工具 goctl 来生成一个 api service,其 main 函数如下: func main() { flag.Parse() var ...

  8. linux下nginx编译安装、版本信息修改

    环境 centos 7 安装依赖包 yum install -y gcc gcc-c++ glibc glibc-devel pcre pcre-devel zlib zlib-devel opens ...

  9. allure报告中allure.title 如何去掉后方的参数化显示

    1.解决方法如下 listener.py 文件位置:Lib\site-packages\allure_pytest\listener.py (第三方包所在的LIb目录) 将下图中红色部分test_re ...

  10. spark性能优化(一)

    本文内容说明 初始化配置给rdd和dataframe带来的影响 repartition的相关说明 cache&persist的相关说明 性能优化的说明建议以及实例 配置说明 spark:2.4 ...