故事引入——什么是CA证书

看过一些博客,写的比较形象具体。

◇ 普通的介绍信

想必大伙儿都听说过介绍信的例子吧?假设 A 公司的张三先生要到 B 公司去拜访,但是 B 公司的所有人都不认识他,他咋办捏?常用的办法是带公司开的一张介绍信,在信中说:兹有张三先生前往贵公司办理业务,请给予接洽…云云。然后在信上敲上A公司的公章。

张三先生到了 B 公司后,把介绍信递给 B 公司的前台李四小姐。李小姐一看介绍信上有 A 公司的公章,而且 A 公司是经常和 B 公司有业务往来的,这位李小姐就相信张先生不是歹人了。

这里,A公司就是CA证书。

◇ 引入中介机构的介绍信

好,回到刚才的话题。如果和 B 公司有业务往来的公司很多,每个公司的公章都不同,那前台就要懂得分辨各种公章,非常滴麻烦。所以,有某个中介公司 C,发现了这个商机。C公司专门开设了一项“代理公章”的业务。
今后,A 公司的业务员去 B 公司,需要带2个介绍信:

介绍信1:含有 C 公司的公章及 A 公司的公章。并且特地注明:C 公司信任 A 公司。

介绍信2:仅含有 A 公司的公章,然后写上:兹有张三先生前往贵公司办理业务,请给予接洽…云云。

某些不开窍的同学会问了,这样不是增加麻烦了吗?有啥好处捏?

主要的好处在于,对于接待公司的前台,就不需要记住各个公司的公章分别是啥样子的;他/她只要记住中介公司 C 的公章即可。当他/她拿到两份介绍信之后,先对介绍信1的 C 公章,验明正身;确认无误之后,再比对介绍信1和介绍信2的两个 A 公章是否一致。如果是一样的,那就可以证明介绍信2是可以信任的了。

◇ 什么是证书?

“证书”洋文也叫“digital certificate”或“public key certificate”(专业的解释看“这里”)。

它是用来证明某某东西确实是某某东西的东西(是不是像绕口令?)。通俗地说,证书就好比例子里面的公章。通过公章,可以证明该介绍信确实是对应的公司发出的。

理论上,人人都可以找个证书工具,自己做一个证书。那如何防止坏人自己制作证书出来骗人捏?请看后续 CA 的介绍。

◇ 什么是CA?

CA是Certificate Authority的缩写,也叫“证书授权中心”。(专业的解释看“这里”)

它是负责管理和签发证书的第三方机构,就好比例子里面的中介——C 公司。一般来说,CA必须是所有行业和所有公众都信任的、认可的。因此它必须具有足够的权威性。就好比A、B两公司都必须信任C公司,才会找 C 公司作为公章的中介。

◇ 什么是CA证书?

CA 证书,顾名思义,就是CA颁发的证书。

前面已经说了,人人都可以找工具制作证书。但是你一个小破孩制作出来的证书是没啥用处的。因为你不是权威的CA机关,你自己搞的证书不具有权威性。

这就好比上述的例子里,某个坏人自己刻了一个公章,盖到介绍信上。但是别人一看,不是受信任的中介公司的公章,就不予理睬。坏蛋的阴谋就不能得逞啦。

文本后续提及的证书,若无特殊说明,均指 CA 证书。

概念解释

CA

  • CA(Certificate Authority)被称为证书授权中心,是数字证书发放和管理的机构。
  • 根证书是CA认证中心给自己颁发的证书,是信任链的起始点。安装根证书意味着对这个CA认证中心的信任。
  • 数字证书颁发过程一般为:
    1、用户首先产生自己的密钥对。
    2、将公共密钥(公钥)及部分个人身份信息传送给认证中心。
    3、认证中心在核实身份后,将执行一些必要的步骤,以确信请求确实由用户发送而来,然后,认证中心将发给用户一个数字证书,该证书内包含用户的个人信息和他的公钥信息,同时还附有认证中心的签名信息

有4个概念一定要清楚:

1.1 CA根证书,CA证书

CA证书有两个作用:

  • 签发数字证书(用户找CA签发)
  • 校验数字证书(客户找CA校验收到的证书是否合法有效)

在SSL通信握手过程中,需要将公钥数字证书交给对方,对方如何对数字证书进行校验?就是要在找到签发此证书的CA证书及证书链,一直找到CA根证书。

1.2 数字证书

使用CA证书的私钥给用户生成的公钥签名,生成公钥数字签名证书。证书是为了防伪、防冒充的。

我们通常说的数字证书都是公钥数字证书:包含公钥、签发证书的CA证书信息、CA数字签名等数据。

要验证数字证书的真伪,就需要找到签发这个证书的CA证书,要验证CA证书的真伪则需要找到签发CA证书的CA证书,就这样一直找到根证书。

1.3 非对称密钥系统

非对称加密:在非对称加密系统中,公钥加密的数据只有私钥才能解密,私钥加密的数据只有公钥才能解密。

加密:公钥加密,私钥解密

签名:私钥加密、公钥解密

1.4 ssh免密登录

在ssh免密登录中,需要将公钥放到远程服务器中,本地保存私钥,即可实现免密登录。

证书的签发过程

  1. 服务方 S 向第三方机构CA提交公钥、组织信息、个人信息(域名)等信息并申请认证;
  2. CA 通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等;
  3. 如信息审核通过,CA 会向申请者签发认证文件-证书。证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA的信息、有效时间、证书序列号等信息的明文,同时包含一个签名;签名的产生算法:首先,使用散列函数计算公开的明文信息的信息摘要,然后,采用CA 的私钥对信息摘要进行加密,密文即签名;
  4. 客户端 C 向服务器 S 发出请求时,S 返回证书文件;
  5. 客户端 C 读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,然后,利用对应 CA的公钥解密签名数据,对比证书的信息摘要,如果一致,则可以确认证书的合法性,即公钥合法;
  6. 客户端然后验证证书相关的域名信息、有效时间等信息;
  7. 客户端会内置信任 CA 的证书信息(包含公钥),如果CA不被信任,则找不到对应 CA 的证书,证书也会被判定非法。

在这个过程注意几点:

  1. 申请证书不需要提供私钥,确保私钥永远只能服务器掌握;
  2. 证书的合法性仍然依赖于非对称加密算法,证书主要是增加了服务器信息以及签名;
  3. 内置 CA 对应的证书称为根证书,颁发者和使用者相同,自己为自己签名,即自签名证书;
  4. 证书=公钥+申请者与颁发者信息+签名;

https认证流程

  1. 服务器生成一对密钥,私钥自己留着,公钥交给数字证书认证机构(CA)
  2. CA进行审核,并用CA自己的私钥对服务器提供的公钥进行签名生成数字证书
  3. 将生成的数字证书部署到web服务器
  4. client在https建立连接时,需要先从服务器获取数字证书,在本机找到数字证书的签发机构的CA的公钥(根证书)对数字证书进行验证,比对一致,说明该数字证书确实是CA颁发的(得此结论有一个前提就是:客户端的CA公钥确实是CA的公钥,即该CA的公钥与CA对服务器提供的公钥进行签名的私钥确实是一对。),而CA又作为权威机构保证该公钥的确是服务器端提供的,从而可以确认该证书中的公钥确实是合法服务器端提供的。

注:为保证第4步中提到的前提条件,CA的公钥必须要安全地转交给客户端**(CA根证书必须先安装在客户端)**,因此,CA的公钥一般来说由浏览器开发商内置在浏览器或操作系统的内部。于是,该前提条件在各种信任机制上,基本保证成立。

http通信存在的问题

1、容易被监听
http通信都是明文,数据在客户端与服务器通信过程中,任何一点都可能被劫持。比如,发送了银行卡号和密码,hacker劫取到数据,就能看到卡号和密码,这是很危险的
2、被伪装
http通信时,无法保证通行双方是合法的,通信方可能是伪装的。比如你请求www.taobao.com,你怎么知道返回的数据就是来自淘宝,中间人可能返回数据伪装成淘宝。
3、被篡改
hacker中间篡改数据后,接收方并不知道数据已经被更改

共享密钥加密和公开密钥加密

后续内容的需要,这里插播一段共享密钥加密和公开密钥加密

共享密钥加密
共享密钥的加密密钥和解密密钥是相同的,所以又称为对称密钥

公开密钥加密
加密算法是公开的,密钥是保密的。公开密钥分为私有密钥和公有密钥,公有密钥是公开的,任何人(客户端)都可以获取,客户端使用公有密钥加密数据,服务端用私有密钥解密数据。

异同
共享密钥加密与公开密钥加密相比,加解密处理速度快,但公开密钥更适应互联网下使用

https解决的问题

https很好的解决了http的三个缺点(被监听、被篡改、被伪装),https不是一种新的协议,它是http+SSL(TLS)的结合体,SSL是一种独立协议,所以其它协议比如smtp等也可以跟ssl结合。https改变了通信方式,它由以前的http—–>tcp,改为http——>SSL—–>tcp;https采用了共享密钥加密+公开密钥加密的方式

1、防监听
数据是加密的,所以监听得到的数据是密文,hacker看不懂。
2、防伪装
伪装分为客户端伪装和服务器伪装,通信双方携带证书,证书相当于身份证,有证书就认为合法,没有证书就认为非法,证书由第三方颁布,很难伪造
3、防篡改
https对数据做了摘要,篡改数据会被感知到。hacker即使从中改了数据也白搭。

https完整通信过程

HTTPS在传输的过程中会涉及到三个密钥:

  • 服务器端的公钥和私钥,用来进行非对称加密
  • 客户端生成的随机密钥,用来进行对称加密

一个HTTPS请求实际上包含了两次HTTP传输,可以细分为8步。
1.客户端向服务器发起HTTPS请求,连接到服务器的443端口

2.服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人。

3.服务器将自己的公钥发送给客户端。

4.客户端收到服务器端的证书之后,会对证书进行检查,验证其合法性,如果发现发现证书有问题,那么HTTPS传输就无法继续。严格的说,这里应该是验证服务器发送的数字证书的合法性。如果公钥合格,那么客户端会生成一个随机值,这个随机值就是用于进行对称加密的密钥,我们将该密钥称之为client key,即客户端密钥,这样在概念上和服务器端的密钥容易进行区分。然后用服务器的公钥对客户端密钥进行非对称加密,这样客户端密钥就变成密文了,至此,HTTPS中的第一次HTTP请求结束。

5.客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。

6.服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文。

7.然后服务器将加密后的密文发送给客户端。

8.客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成。

CA认证的原理和流程以及https完整通信过程相关推荐

  1. Nginx 配置 SSL 及 HTTPS 协议通信过程

    一.前言 基础知识 1.1 公钥密码体制(public-key cryptography) 公钥密码体制分为三个部分,公钥.私钥.加密解密算法,它的加密解密过程如下: 加密:通过加密算法和公钥对内容( ...

  2. CA 解密系统原理及流程

    1.名词概念: 接收控制系统/条件接收系统 :该系统的任务是保证DVB业务仅被授权接收的用户所接收,其主要功能是对信号加扰,对用户电子密钥的加密以及建立一个确保被授权的用户能接收到加扰节目的用户管理系 ...

  3. 从wireshake分析http和https的通信过程

    参考文章: Wireshark基本介绍和学习TCP三次握手 [技术流]Wireshark对HTTPS数据的解密 Wireshark/HTTPS Journey to HTTP/2 以TCP/IP协议为 ...

  4. HTTPS加密通信过程原理

    目录 一.从网络层协议理解HTTPS 二.从密码学理解 三.加密 对称加密 非对称加密 1.客户端请求服务端,发送TLS版本,和加密套件,和第一个随机数 2.服务器收到请求后,向客户端发送生成的第二个 ...

  5. 浏览器获取CA认证流程

    首先说说证书的签发过程: 服务方 S 向第三方机构CA提交公钥.组织信息.个人信息(域名)等信息并申请认证: CA 通过线上.线下等多种手段验证申请者提供信息的真实性,如组织是否存在.企业是否合法,是 ...

  6. asp.net core 使用identityServer4的密码模式来进行身份认证(2) 认证授权原理

    前言:本文将会结合asp.net core 认证源码来分析起认证的原理与流程.asp.net core版本2.2 对于大部分使用asp.net core开发的人来说. 下面这几行代码应该很熟悉了. s ...

  7. 网络协议从入门到底层原理(8)HTTPS(成本、通信过程、TLS1.2的连接,配置服务器HTTPS)

    HTTPS SSL / TLS OpenSSL HTTPS的成本 HTTPS的通信过程 TLS 1.2 的连接(ECDHE密钥交换算法) ① Client Hello ② Server Hello ③ ...

  8. 【基础补充】http/https协议及通信过程

    目录 1 HTTP协议与HTTPS协议 1.1 HTTP协议概述 1.2 HTTPS协议概述 1.3 HTTPS与HHTP对比 2 通信过程 3 URI和URL的区别 4 报文组成 4.1 请求 4. ...

  9. CA认证与HTTPs原理介绍

    今天继续给大家介绍Linux运维相关知识,本文主要内容是CA认证与HTTPs原理知识. 一.https与ssl 我们在访问网站时,使用的比较常见的是https协议,https协议其实就是在http协议 ...

最新文章

  1. 【C++】【十一】二叉树递归遍历与非递归遍历的实现及思路
  2. call super class will trigger CGLIB
  3. java 中 transient关键字
  4. vba结束本次循环进行下次_VBA掌握循环结构,包你效率提高500倍
  5. java ftp connect_java操作Ftp文件的一些方式(一)
  6. JUC阻塞队列BlockingQueue讲解
  7. 十字链表、邻接多重表
  8. 『深度应用』一文搞懂深度学习人脸识别模型开发流程
  9. mysql 1236错误_MySQL主主同步环境出现1236错误
  10. java 去停用词_Lucene学习之——停用词
  11. 如何利用 COMSOL 自动执行建模操作
  12. 【原创】matlab 2010的下载和安装
  13. C如何简单的读写文件?二进制文件如何读写?如何移动文件指针?
  14. 360无线网卡驱动linux,ubuntu安装360随身wifi驱动
  15. 组织行为学笔记(4)——人格与价值观
  16. vue+elementui表格前端导出excel以及自定义导出样式
  17. 银行信贷管理系统的客户关系管理子模块
  18. CentOS7:配置防火墙
  19. Git之将master合并到自己分支
  20. 企业微信客户端开启调试模式

热门文章

  1. 30岁+,大龄青年转行程序员的切身经历
  2. ps中海报设计的设计思路
  3. 展馆人流量怎么测算?
  4. IAR for MSP430 7_12在线调试不能打断点解决方法
  5. java 蓝牙_PC平台上JAVA蓝牙通信实现方法
  6. QCon全球软件开发大会(北京站)2015精彩回顾和总结
  7. 这些网络流行语是什么意思!打工是不可能打工的,这辈子不可能打工的!(来自窃·格瓦拉的名言)
  8. 红米note5刷android,红米note5刷魔趣Android10上手体验!这速度,我爱了!
  9. 计算机usb接口是一种通用,USB接口大科普,你用的是哪一种?
  10. 腾讯Hardcoder Android通讯框架简介