前言

主要是自己学习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. ClickOnce 获取客户端发布版本号

    https://social.microsoft.com/Forums/es-ES/26786b8d-0155-4261-9672-11b786d8c1d6/clickonceandsetup /// ...

  2. 案例九:shell脚本自动创建多个新用户,并设置密码

    此脚本是用来批量创建用户并设置用户密码,在企业用非常实用. 脚本一 #!/bin/bash for name in $( seq 1 100 ) do useradd "user$name& ...

  3. TP5多条件搜索,同时有必要条件

    $model = $this->model; // 查询是否有搜索参数 $search = input('?get.search') ? trim(input('get.search')) : ...

  4. jquery获取一个元素符合条件的第一个父元素

    closest jQuery 1.3新增.从元素本身开始,逐级向上级元素匹配,并返回最先匹配的元素.. closest会首先检查当前元素是否匹配,如果匹配则直接返回元素本身.如果不匹配则向上查找父元素 ...

  5. dedecms编辑器不能复制word格式的处理方法

    在word文档中编辑一篇文章,格式段落都整理好后,粘贴到dede编辑器里面却发现,格式都无效了,可能dede有自己的打算,比如这样可以文章字体大小统一,样色统一,整体比较整洁.但是用惯了word编辑文 ...

  6. Elasticsearch6.8.6版本 在head插件中 对数据的增删改操作

    一.访问ES方法:http://IP:PORT/ 一.创建索引:head插件创建索引的实例:在"索引"-"新建索引"中创建索引名称,默认了分片与副本情况: 直接 ...

  7. Appium自动化测试时为什么要自己封装find方法

    官方的find_element方法不能很好地处理异常,所以自行封装,以智能化处理各种异常

  8. P5012-水の数列【并查集,RMQ】

    正题 题目链接:https://www.luogu.com.cn/problem/P5012 题目大意 \(n\)个数字的一个序列,\(T\)次询问给出\([l,r]\)要求 找出一个最大的\(x\) ...

  9. R7000 电脑调整亮度

    R7000 电脑亮度太亮,想调整亮度,fn+F5,F6 不起作用,需要调整显卡的设置

  10. MFC读写.txt文件时进度条显示实时进度

    整体实现方式:先获得文件长度,然后用每次读取的长度,计算出完成的百分比,用百分比的值设置进度条. 一.MFC进度条 Progress Control 相关函数 1. create() --创建Prog ...