Abstract

TLS、SSL、摘要(digest)、对称/非对称加密、数字签名(signature)、证书(certification),傻傻分不清楚?为了解 https, 鄙人对以上这几个名词都做了些功课,特此记录一下。

Content

SSL/TLS
密码学

overview
摘要算法/hash算法
对称/非对称加密

签名
证书
SSL四次握手
实践

SSL/TLS

首先,我们来回首一下 SSL/TLS 的演进过程。

  • SSL: Secure Sockets Layer
  • TSL: Transport Layer Security
  • SSL1.0 -> SSL2.0 -> SSL3.0 -> TLS1.0(SSL3.1) -> TLS1.1(SSL3.2) -> TLS1.3(SSL3.3)

密码学

其次,为了解https,先来了解一下密码学。

  • Overview

  • Hash/散列/摘要算法

hash(原始数据)= 一段固定长度的数据摘要

  • 对称加密

  • 非对称加密

- 公私钥对
- 公钥加密的话,只有私钥能解密
- 私钥加密的话,只有公钥能解密

(notes: 顾名思义,私钥只有服务器做保留,公钥发放给客户端。根据这一性质,一般都用公钥做加密,私钥做签名)

签名

根据上文所述,先对一段原文进行散列算法提取定长的数字摘要,再对数字摘要通过私钥加密,即为签名(就是一段密文)。


签名(密文) = 私钥加密(hash(明文))

签名的目的是为了防止数据篡改。在不安全的网络传输环境中,可能会有中间商/黑客拦截请求获取数据并加以修改,解决方法是通常从服务端发送(原文 + 算列算法 + 摘要), 客户端通过(原文 + 算列算法)重新计算出新摘要,两者相同则说明数据并未被篡改,反之亦然(即使数据被拦截,客户端计算的新摘要与源摘要不匹配,客户端也会拒绝)。

证书

证书就是一份数字签名,只不过原始信息包含了服务器域名、地址、公司等信息。

SSL四次握手

了解了上述背景之后,我们来看一下具体服务端和客户端是如何连接的。

(这里细节请大家自行欣赏大佬原文 ==> link here

根据鄙人理解,最最主要交互信息如下

第一次握手 1.客户端生成随机数A,稍后用于生成"对话密钥"
2.客户端提供支持的TLS版本
3.客户端提供支持的加密算法套(摘要算法 + 对称加密 + 非对称加密)
第二次握手 1.服务端生成随机数B,稍后用于生成"对话密钥"
2.服务端返回支持的TLS版本(如果不一致服务端关闭加密通信)
3.服务端返回决定的加密算法套(摘要算法 + 对称加密 + 非对称加密)
4. 服务端返回服务端证书(server.pem)
第三次握手 1.客户端生成随机数C,该随机数用服务器公钥加密,防止被窃听
2.客户端验证证书
3.编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送
4.客户端握手结束通知
第四次握手 1.编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送
2.服务端握手结束通知

最终的结果则为

对于这么做的目的以及如何四次握手是保证安全的,网上解析繁花似锦。小人取众家之长,以倒推的思路,给予个人如下理解。

Q1.如何实现Https加密传输?

A1. 最终的目的是服务端和客户端采用两者协商好的对称加密算法进行通信

  • 首先,对称加密比非对称加密开销小。
  • 如果用非对称加密得话,双端均有存一份公私钥对,数据发送方(可以是服务端,也可以是客户端)均需要公钥加密,接收方私钥解密。

Q2. 那么,对称加密效率是满足了,但是如何保证安全性呢?

A2. 确保服务端和客户端生成相同的密钥,这个密钥有且只有双端持有,第三方不知道

  • 通过四次握手之后,双端已协商好了要使用的加密套(摘要算法 + 对称加密 + 非对称加密,同时双端均已知上述握手中提到的A、B、C三个随机数,那么用这三个随机数

Q3. 握手的时候随机数和协商的加密算法被中间商拦截,不也可以生成相同密钥仿冒客户端与服务端通信?

A3. 这时就引入了证书,证书包含服务端公钥信息,可对随机数C加密

  • 因为是用服务端公钥加密,所以这个随机数只有服务端自己本地的私钥可以解,第三方及时拿到也解不了,这就保证了第三方不可能生成相同的会话密钥。

Q4.第二次握手中,中间第三方拦截了证书,并用自己的私钥伪造一份证书发送给客户端

  • 这就导致了一个问题,客户端以为自己在和服务端通信,其实是在和第三方通信。

Q5.如何校验证书?

A5.这时就需要CA根证书对服务端证书校验

  • CA(Certification Authority),全世界官方认证机构,他们的ca根证书在操作系统安装中保留(我理解就是本地自带)

  • 用根证书的公钥解密,解不开则说明该证书不是由CA机构签发的,不受信任

  • 可以解开得话,证书中应该含有摘要、摘要算法,服务端可以根据证书原文和摘要算法重新hash算出摘要,校验证书是否被篡改

【网络】https 轻解读的更多相关文章

  1. [论文阅读]阿里DIN深度兴趣网络之总体解读

    [论文阅读]阿里DIN深度兴趣网络之总体解读 目录 [论文阅读]阿里DIN深度兴趣网络之总体解读 0x00 摘要 0x01 论文概要 1.1 概括 1.2 文章信息 1.3 核心观点 1.4 名词解释 ...

  2. [论文阅读]阿里DIEN深度兴趣进化网络之总体解读

    [论文阅读]阿里DIEN深度兴趣进化网络之总体解读 目录 [论文阅读]阿里DIEN深度兴趣进化网络之总体解读 0x00 摘要 0x01论文概要 1.1 文章信息 1.2 基本观点 1.2.1 DIN的 ...

  3. 网络https工作原理

    网络https工作原理 待办 https://www.runoob.com/w3cnote/https-ssl-intro.html

  4. https原理解读

    参考:架构师必读!以图文的方式解锁 HTTPS原理,10分钟还原HTTPS真像! 对于消息安全的定义是:即使消息被中间人拦截到,中间人也没办法解读出其中的消息. 对称加密 要实现消息安全,首先想到的是 ...

  5. YOLO2解读,训练自己的数据及相关转载以供学习

    https://pjreddie.com/darknet/yolo/ 具体安装及使用可以参考官方文档https://github.com/pjreddie/darknet https://blog.c ...

  6. 【倒腾HTTPS】Nginx for Docker自签名SSL证书

    前言 合格的web程序员, 必须能自由在 IIS. Nginx. Nginx for Docker上配置Https服务, 博客最近将专题记录 Https  &   Hsts 如何申请适用于生产 ...

  7. Neutron 理解 (1): Neutron 所实现的虚拟化网络 [How Netruon Virtualizes Network]

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

  8. 深度学习网络压缩模型方法总结(model compression)

    两派 1. 新的卷机计算方法 这种是直接提出新的卷机计算方式,从而减少参数,达到压缩模型的效果,例如SqueezedNet,mobileNet SqueezeNet: AlexNet-level ac ...

  9. 用于文本分类的RNN-Attention网络

    用于文本分类的RNN-Attention网络 https://blog.csdn.net/thriving_fcl/article/details/73381217 Attention机制在NLP上最 ...

  10. Neutron网络学习

    学习 Neutron 系列文章: 转http://www.cnblogs.com/sammyliu/p/4622563.html (1)Neutron 所实现的网络虚拟化 (2)Neutron Ope ...

随机推荐

  1. ansible 003 常用模块

    常用模块 file 模块 管理被控端文件 回显为绿色则,未变更,符合要求 黄色则改变 红色则报错 因为默认值为file,那么文件不存在,报错 改为touch则创建 将state改为directory变 ...

  2. KingbaseES V8R6备份恢复案例之--删除test数据库后sys_backup.sh备份

    案例说明: KingbaseES V8R6通过sys_backup.sh执行物理备份,默认sys_backup.sh执行备份初始化时,需要连接test数据库进行身份的认证:在一些生产环境为了安全需求, ...

  3. KingbaseES R3集群在线删除数据节点案例

    案例说明: kingbaseES R3集群一主多从的架构,一般有两个节点是集群的管理节点,所有的节点都可以为数据节点:对于非管理节点的数据节点可以在线删除:但是对于管理节点,无法在线删除,如果删除管理 ...

  4. 从代码到发包,一个程序全搞定!Gitea 推出软件包自托管功能 Package Registry

    2022 年 7 月的最后一天,随着 Gitea 1.17.0 版本的正式发布,Gitea 开源社区推出了一项名为 Package Registry 的包管理功能,与 Gitea 代码仓库无缝集成,类 ...

  5. jmeter性能测试之正则提取响应头或者响应体

    准备工作做好,先发送请求 然后察看结果树中的响应消息 比如我们要提取这个cookie,先调试一下,看能不能提取到 看蓝色的线条,我们提取到了,然后我们把这句话写入到后置处理器中的正则表达式提取里 再次 ...

  6. Django 之必知必会三板斧

    一.HttpResponse 在django.http 模块中定义了HttpResponse 对象的API,HttpRequest 对象由Django 自动创建,不调用模板,直接返回数据. 1 在 a ...

  7. NSIS自定义目录选择页面制作之安装…

    在nsis制作自定义界面中,目录选择页面个人感觉最为繁琐,因为该界面不仅涉及到界面控件的创建,还要涉及到控件消息传递和状态改变时的回调函数通告. 迅雷界面为例: 其中安装目录中的8盘符,在本机中并不存 ...

  8. 工作7年收集到的git命令

    概念 git 中的术语解释: 仓库也叫版本库(repository) stage:暂存区,add 后会存到暂存区,commit 后提交到版本库 git 安装 linux 下安装 git 第一种方法:y ...

  9. Gson的使用与理解

    当今社会下,前后端分离,不同系统的信息交互,消息队列的数据传递,微服务的不同服务之间的数据处理,越来越多地方用到了序列化.序列化作为不同系统不同服务之间的数据桥梁.那么方便快捷的序列化工具还是必要的. ...

  10. 十大 CI/CD 安全风险(三)

    在上一篇文章,我们了解了依赖链滥用和基于流水线的访问控制不足这两大安全风险,并给出缓解风险的安全建议.本篇文章将着重介绍 PPE 风险,并提供缓解相关风险的安全建议与实践. Poisoned Pipe ...