TLS

传输层安全性协定 TLS(Transport Layer Security),及其前身安全套接层 SSL(Secure Sockets Layer)是一种安全协议,目的是为网际网路通信,提供安全及数据完整性保障。

如图,TLS 在建立连接时是需要

  1. 客户端发送 ClientHello(包含支持的协议版本、加密算法和 随机数A (Client random))到服务端
  2. 服务端返回 ServerHello、公钥、证书、随机数B (Server random) 到客户端
  3. 客户端使用CA证书验证返回证书无误后。生成 随机数C (Premaster secret),用公钥对其加密,发送到服务端
  4. 服务端用 私钥 解密得到 随机数C (Premaster secret),随后根据已经得到的 随机数ABC生成对称密钥(hello的时候确定的加密算法),并对需要发送的数据进行对称加密发送
  5. 客户端使用对称密钥(客户端也用随机数ABC生成对称密钥)对数据进行解密。
  6. 双方手持对称密钥 使用对称加密算法通讯

而这一流程 服务端的证书 是是至关重要的。

证书

证书用来证明公钥拥有者身份的凭证

首先我们需要知道 证书是怎么来的。

数字证书一般由数字证书认证机构签发,需要

  • 申请者通过非对称加密算法(RSA) 生成一对公钥密钥,然后把需要的申请信息(国家,域名等)连同公钥发送给 证书认证机构(CA)
  • CA构确认无误后通过消息摘要算法(MD5,SHA) 生成整个申请信息的摘要签名M, 然后 把 签名M和使用的摘要算法CA自己的私钥 进行加密

证书包含了

  • 公钥
  • 证书拥有者身份信息
  • 数字证书认证机构(发行者)信息
  • 发行者对这份文件的数字签名及使用的算法
  • 有效期

证书的格式和验证方法普遍遵循 X.509 国际标准。

证书认证机构(CA)

数字证书认证机构(英语:Certificate Authority,缩写为CA),也称为电子商务认证中心、电子商务认证授权机构,是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。

其实任何个体/组织都可以成为CA(自签证书),但是你发发布的证书客户端是不信任的,也是就前文提及的需要权威。比如 Symantec、Comodo、Godaddy、Digicert

客户端信任这些CA,就会在其本地保持这些CA的 根证书root certificate),根证书是CA自己的证书,是证书验证链的开头。
根证书没有机构(已经是权威了)再为其做数字签名,所以都是自签证书。

CA会通过 中介证书(intermediate-certificate) 替代根证书的去做服务器端的证书签名,确保根证书密钥绝对不可访问。

Godaddy 给出了解释

What is an intermediate certificate?
https://sg.godaddy.com/help/what-is-an-intermediate-certificate-868

证书信任链

前文提到,在向CA 申请证书时是需要 CA的私钥 去对整个证书的签名摘要做非对称加密的,也就是证书是可以通过 CA的公钥 去解密得到证书的签名摘要的。
当我们再次用 相同的摘要算法(证书里面有保存所使用的算法)对整个证书做签名,如果得到的签名和证书上的签名是一致的,说明这个证书是可信任的。

同理,中介证书 也是可以被这样的方式证明其可信任。这样的一整个流程称为 信任链(Chain of trust)。

就是我绝对相信你(A>B);你绝对相信他(B>C);等于我绝对相信他(A>C)

以下是整个流程:

  1. 客户端得到服务端返回的证书,通过读取得到 服务端证书的发布机构(Issuer)
  2. 客户端去操作系统查找这个发布机构的的证书,如果是不是根证书就继续递归下去 直到拿到根证书
  3. 根证书的公钥解密验证 上一层证书的合法性,再拿上一层证书的公钥去验证更上层证书的合法性;递归回溯。
  4. 最后验证服务器端的证书是 可信任 的。

Reference

https://www.wikiwand.com/zh/根证书
https://www.wikiwand.com/zh-hans/信任鏈
https://www.wikiwand.com/zh-hans/证书颁发机构
http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html
http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html

更多

更多优秀内容,请 关注微信公众号 获取,加群还可以与小伙伴们交流讨论哦!

一次看懂 Https 证书认证的更多相关文章

  1. 一文看懂https如何保证数据传输的安全性的【转载、收藏】

    一文看懂https如何保证数据传输的安全性的   一文看懂https如何保证数据传输的安全性的 大家都知道,在客户端与服务器数据传输的过程中,http协议的传输是不安全的,也就是一般情况下http是明 ...

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

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

  3. 一文看懂HTTPS、证书机构(CA)、证书、数字签名、私钥、公钥(转)

    说到https,我们就不得不说tls/ssl,那说到tls/ssl,我们就不得不说证书机构(CA).证书.数字签名.私钥.公钥.对称加密.非对称加密.这些到底有什么用呢,正所谓存在即合理,这篇文章我就 ...

  4. 一个故事看懂HTTPS

    我是一个浏览器,每到夜深人静的时候,主人就打开我开始学习. 为了不让别人看到浏览记录,主人选择了"无痕模式". 但网络中总是有很多坏人,他们通过抓包截获我和服务器的通信,主人干了什 ...

  5. 一文看懂https如何保证数据传输的安全性的

    通过漫画的形式由浅入深带你读懂htts是如何保证一台主机把数据安全发给另一台主机的 对称加密 一禅:在每次发送真实数据之前,服务器先生成一把密钥,然后先把密钥传输给客户端.之后服务器给客户端发送真实数 ...

  6. UIWebView 跳过HTTPS证书认证

    UIWebView跳过证书认证 在UIWebView中加入如下代码即可(Error Domain=NSURLErrorDomain Code=-1202) //跳过证书验证 @interface NS ...

  7. 一文看懂HTTPS的核心知识

    1.HTTPS历史 由于HTTP的消息传输的安全隐患,于是网景公司在1994年设计了SSL(Secure Sockets Layer,安全套接字层)协议,目的是保障网上交易安全,从而就诞生了HTTPS ...

  8. 网络安全——一图看懂HTTPS建立过程

    关于网络安全加密的介绍可以看之前文章: 1. 网络安全--数据的加密与签名,RSA介绍 2. Base64编码.MD5.SHA1-SHA512.HMAC(SHA1-SHA512) 3. When I ...

  9. 【转】网络安全——一图看懂HTTPS建立过程

    阅读目录 准备工作(对应图中prepare1234) 发起链接 最后 关于网络安全加密的介绍可以看之前文章: 1. 网络安全——数据的加密与签名,RSA介绍2. Base64编码.MD5.SHA1-S ...

随机推荐

  1. Servlet接口的实现

    Servlet接口对Servlet进行了规范,定义了方法的主要范围. 1.public void init(ServletConfig servletConfig) (初始化) 参数的作用: (1)调 ...

  2. 分别设计点类Point和圆类Circle,点类有两个私有数据纵坐标和横坐标;圆类有也两个私有数据圆心和半径,其中圆心是一个点类对象;要求如下所述: (1) 通过构造方法初始化数据成员,数据成员的初始化通过构造方法的参数传递;(2) 分别编写点和圆的输出函数,其中圆的输出包括圆心和半径的输出;点的输出x,y;

    题目相对简单: package naizi; public class Circle { //私有成员及构造方法 private Point center; private int r; Circle ...

  3. linux文件系统分区、格式化、挂载、卷标挂载、永久挂载

    思想不放松你的行为就不会放松,你的行为放松了,说明你的思想放松了.

  4. python解释器安装和变量配置

    python解释器安装 第一步https://www.python.org/ 下载 python-3.6.6 和 python-2.7.16 俩个版本 Downloads 下 选windows版本 4 ...

  5. Vue-学习笔记0-独立项目搭建

    前言 搭建Vue+Webpack项目,使用vue-cli搭建项目. 准备 vue独立项目依赖node的npm包管理器,所以需要先安装node. 相关的npm常用命令文章: Npm-常用命令,点击访问 ...

  6. 搭建数据库galera集群

    galera集群 galera简介 galera集群又叫多主集群,用于数据库的同步,保证数据安全 最少3台,最好是奇数台数,当一台机器宕掉时,因为仲裁机制,这台机器就会被踢出集群. 通过wsrep协议 ...

  7. axios使用post方式请求出现400

    在vue中如果直接使用与ajax的参数传递方式类型是不正确的,需要转化,方式有两种 1:使用 new URLSearchParams()构造参数 let params = new URLSearchP ...

  8. 微信小程序中的tabBar设置

    我们先来看一份图,这个设置在官方文档中已经写得很清楚了,我只是做一个总结 注:我写注释是为了方便说明,在小程序中的json文件中是不能用注释的 这个tabBar属于全局属性,因此就在全局配置文件app ...

  9. Hadoop点滴-初识MapReduce(1)

    分析气候数据,计算出每年全球最高气温(P25页) Map阶段:输入碎片数据,输出一系列“单键单值”键值对 内部处理,将一系列“单键单值”键值对转化成一系列“单键多值”键值对 Reduce阶段,输入“单 ...

  10. Java中Synchronized的优化原理

    我们知道,从 JDK1.6 开始,Java 对 Synchronized 同步锁做了充分的优化,甚至在某些场景下,它的性能已经超越了 Lock 同步锁.那么就让我们来看看,它究竟是如何优化的. 原本的 ...