前言

主要是自己学习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. webgl 图像处理 加速计算

    webgl 图像处理 webgl 不仅仅可以用来进行图形可视化, 它还能进行图像处理 图像处理1---数据传输 webgl 进行图形处理的第一步: 传输数据到 GPU 下图为传输点数据到 GPU 并进 ...

  2. POJ2352 Stars (静态二叉检索树)

    https://vjudge.net/problem/POJ-2352 分析: 由于是按照y坐标的升序,y坐标向等的按x的升序的顺序给出星星.那么某个星星的等级数就是在他前面x坐标小于等于他的x坐标的 ...

  3. python BeautifulSoup html解析

    * BeautifulSoup 的.find(), .findAll() 函数原型 findAll(tag, attributes, recursive, text, limit, keywords) ...

  4. Jenkins持续交付实战演练

    jenkins web hook机制 运行jenkins任务触发方式: 主动运行 定时构建 就算代码库没有更新,也会构建. 通过代码库主动触发Jenkins的构建任务 jenkins向外暴露一个触发器 ...

  5. javascript 字符串反转 strip_tags 字符串常用的自定义函数,加载css etc.

    字符串反转 String.prototype.reverse = function() { var a = this.split(''); for (var i = 0, j = a.length-1 ...

  6. whistle抓包-数据包分析

    额,这篇忘了是来自哪位作者的了. whistle:1.14.6 这里以抓取浏览器数据包为例,分析抓取的数据. Method:Connect,对应Host:Tunnel to意思是因为网络环境受限,客户 ...

  7. Python Software Foundation

    The Python Software Foundation (PSF) is a 501(c)(3) non-profit corporation that holds the intellectu ...

  8. 势流理论笔记:03 Hess-Smith积分方法

    书接上回势流理论笔记:02 直接法与间接法 Hess-Smith方法 采用面向对象编程的思路,\(Matlab\)程序脚本,实现以下功能: 输入面元(四边形面元顶点坐标) 输出系数矩阵\([H][M] ...

  9. 使用python -m pip install 和 pip install 安装包有什么区别?

    如果去看源码的话,你会发现 pip 作为执行文件的入口点是 pip._internal.main. 另一方面,pip 作为模块运行时入口是 _main.py,而该模块也只是调用 pip.interna ...

  10. 在Vue中使用JSX,很easy的

    摘要:JSX 是一种 Javascript 的语法扩展,JSX = Javascript + XML,即在 Javascript 里面写 XML,因为 JSX 的这个特性,所以他即具备了 Javasc ...