关于HTTPS认证,这里解决你所有疑惑
摘要:从签发证书到数据加密交互,按流程的进展讲解HTTPS认证过程内容和原理。
本文分享自华为云社区《故事+图文,一次性解决你对HTTPS认证过程的所有疑惑》,作者:breakDraw。
讲解HTTPS认证原理的文章非常多,也算是做web开发的基础知识了。但是这类文章看过去都有一个特点——知识点超级多,很乱。
证书、签名、公钥、私钥、哈希、CA证书、网站证书、对称非对称加解密……一堆概念夹杂在一起,导致很多人对这块只能说个所以然,却无法做到完全理解。
这里我就用 从签发证书到数据加密交互,按流程完整解释, 并在其中穿插图片和问题,来完整解释这个原理。
一、创业前的资质申请——证书签发
某天,我做了一个网站, 如果直接开放给所有人访问,那么就属于无证经营, 每个访问我网站的人,都会收到浏览器如下的警告。

为了解决这个问题, 我需要去工商局也就是证书颁发机构CA( Certificate Authority),去获取一个证书,来证明我这个网站是安全的。
CA机构要求我提供身份证 、 店铺信息等一系列申请信息,整合成一个server.req的文件, 提交给他。

CA机构会有专门的人进行审查,确认我的资质、合法性。审查通过后,他们就开始了证书签发工作。
1、首先, 他们觉得我的网站信息太长了,不好用来做检查或者对比,于是用一个 哈希算法(可以是sha256),将其变成一个固定长度的字符串, 这个字符串被他们叫做 摘要(Digest)。
2、接着,他们请出了CA机构中的最高领导,将这个摘要加上领导名字 重新在纸上写了一遍,然而写出来时却是一串看不懂的线条。 这是领导独有的写法,除了他自己,任何人都无法模仿。而且普通人也根本看不懂。
这个领导的名字叫做 CA私钥。而这个看似瞎写的过程, 叫做私钥签名,即对摘要重写并暗含了自己的名字,只是一般人根本看不懂罢了。
3、接着他们把我的网站信息、CA签名 打包成了一个证书,颁发给我,叫我好好保管, 如果有顾客问我,我就可以把这个证书拿出来给他们看。
我疑惑地问道: “你这个签名写得乱七八糟,谁也看不懂啊,顾客咋确认我这个是合法的证书?”
CA证书的机构笑了笑,说:“你只管提供就好了,顾客们自有办法”。
最终整个颁发的过程如下所示:

二、究极谨慎的顾客——证书验证
那天,我游荡在街头,无意发现一个我很感兴趣的店,我进入了店内,却发现这家店是新开的。
如果我不确认这家店的合法性,那么很有可能进入一家黑店,被宰或者被犯罪都有可能。
此刻我必须确认这个店家的证书是CA机构签发的,还是他自己造假的证书。
而我正好认识一位和CA私钥一起出生长大的兄弟 CA公钥(公私钥都是同时生成的), 虽然无法模仿领导的笔迹,但是能够勉强看懂。
CA公钥确认了签名是CA私钥所写,而且能够正确解读出签名中的摘要信息。他还将其与经营证书上所有文字生成的新摘要进行比对, 发现确实一致,因此他认定这是合法的证书。
上面这个过程,就叫做验签, 如下所示

可是,一般能解读出签名是CA私钥所写就够了, 为什么还要比对一下摘要信息呢?
因为签名公钥只能识别出这个字是私钥所写,但是私钥曾经为别人写过很多的签名。万一造假者把签名换成了其他正规店铺里抄来的签名,那怎么办? 所以肯定得确认下这个签名的内容是不是和证书上所写的店铺是同一家。
上面的过程是单向认证,即客户端验证服务端。
如果商家担心碰到居心不良的顾客, 那么同样可以让顾客提供 类似签发过程的证书,以证明自己也是可信的顾客, 这就是双向认证。
三、超级而隐秘的交易
上面的店家和顾客,通过证书验证,确认了各自的身份。接着便决定互相进行快递交易。
但因为路上不安全,经常有强盗或者小偷出没,如何保证快递不被盗取很重要。
顾客打算把钱(通信数据)放在一个密码箱里, 然后设置好密码,再快递过去。
这个密码叫做会话密钥,任何人拿到密码都能打开密码箱,所以也叫对称密钥
但是店家该怎么知道这个密码呢?
如果顾客直接把密码箱的密码快递过去, 密码在路上被小偷看到了, 那后面发出去的钱岂不是就能被小偷解开并拿到了?

这时候顾客想起来,当时拿到的商家经营证书里, 携带了一个叫 公钥的东西, 通过这个东西, 可以把 密码箱密码 变成另一串看不懂的数字, 只有商家自己能够解读这个数字。
于是顾客用公钥生成了一个 加密后的密码, 并成功送到了店家手中。

店家拿到后, 使用自己的私钥成功解读出了这个密码。接着店家和顾客就 都把密码箱设置成密码,进行快递, 除了店家和顾客, 其他人都无法知道这个密码是多少, 劫匪们也就无从下手了。

四、关键问题
上面过程中,还有几个关键问题,这里提出,可以先自己思考,再看答案:
Q: 为什么不使用非对称密钥加密 传输数据, 而要用对称密钥这样绕一大圈?
A:对称算法的加解密性能比非对称算法快很多, 所以非对称只用于会话密钥的传输即可, 只需要一次。
Q: 为什么数据开始传输之后不需要再做验签, 难道者中间的数据就不会再被人篡改或者替换吗?
A:不会,有3个原因保证:
- 会话密钥是会话级别, 动态生成的,只有这一次连接才会用到。因此以前废弃的会话密钥不用担心被人拿去利用。
- 建立连接并传递会话密钥之前,已经通过验签确认过对方身份是可信的。
- 没有任何第三方知道会话密钥是什么。因此第三方攻击人无法用正确的会话密钥加密数据,即无法做到伪造会话密钥来欺骗接收者的目的。
Q: CA根证书可能被造假吗?
例如黑客修改了用户机器中的CA证书,导致CA的公钥被替换了, 后面访问了黑客所在的网址时,就会验签成功。
A:如果真的能修改的话,那么是可行的。
但是操作系统基本会内置著名CA的公钥,除非黑客已经能直接触碰你的操作系统底层了,否则基本办不到。
五、总结和完整大图
上文的顾客就是客户端(也可以是浏览器), 店家就是服务端(网站), 工商局就是可信CA机构(或者某域内自己设置的颁发机构也行)。
而一些要点总结如下:
- CA私钥用于签名, CA公钥用于验签
- 要先生成摘要,再签名。目的是为了验签后确认来源是所签的服务端。
- 服务端公钥用于加密, 服务端私钥用于解密。
- 传输数据使用对称密钥进行加密和解密。

关于HTTPS认证,这里解决你所有疑惑的更多相关文章
- AFNetworking之于https认证
写在开头: 本来这篇内容准备写在AFNetworking到底做了什么?(三)中的,但是因为我想在三中完结这个系列,碍于篇幅所限.并且这一块内容独立性比较强,所以单独拎出来,写成一篇. 本文从源码的角度 ...
- AFNetworking 之于 https 认证
写在开头: 本来这篇内容准备写在AFNetworking到底做了什么?(三)中的,但是因为我想在三中完结这个系列,碍于篇幅所限.并且这一块内容独立性比较强,所以单独拎出来,写成一篇. 本文从源码的角度 ...
- 【转】AFNetworking之于https认证
转自:http://www.cocoachina.com/ios/20161220/18393.html 写在开头: 本来这篇内容准备写在AFNetworking到底做了什么?(三)中的,但是因为我想 ...
- file_get_contents无法请求https连接的解决方法 php开启curl
file_get_contents无法请求https连接的解决方法 方法1: PHP.ini默认配置下,用file_get_contents读取https的链接,就会如下错误: Warning: fo ...
- github pages 子域名 ( subdomain ) https 认证
目录 说明 github pages 上的创建子域名 https 认证 说明 转载请注明出处https://www.cnblogs.com/bllovetx/p/12013462.html 欢迎访问我 ...
- 百度站长平台HTTPS认证所遇到的坑
坑1: 百度站长平台https认证失败,提示:请确保您网站的所有链接均支持https访问,且未使用不安全协议(如:SSL2.SSL3等协议). 解决办法: 1. 友情链接检查, 要检查所有的友情链接 ...
- Linux下Apache https认证
参考:http://kyfxbl.iteye.com/blog/1910891 http://showerlee.blog.51cto.com/2047005/1266712 一.环境 httpd:A ...
- https认证
HTTPS认证 说明 1. HTTPS协议的站点信息更加安全,同时可降低网站被劫持的风险,如网站同时存在HTTP和HTTPS站点,可使用本工具进行认证,便于百度搜索识别网站HTTP与HTTPS之间的对 ...
- Harbor配置https认证
Harbor配置https认证由于Harbor不附带任何证书,它默认使用HTTP来提供注册表请求.但是,强烈建议为任何生产环境启用安全性.因为测试使用,使用自签名证书: 1.创建CA证书 首先创建个目 ...
- CAS去掉HTTPS认证
如何去掉HTTPS认证? 说明:默认情况下HTTP也是可以访问CAS SERVER的,但认证,登陆,退出等操作均没有任何的效果.所以必须作出下面的修改 1.进入WEB-INF\spring-confi ...
随机推荐
- Util应用框架核心(一) - 服务配置
本文介绍在项目中如何配置 Util 依赖服务. 文章分为多个小节,如果对设计原理不感兴趣,只需要阅读基础用法部分即可. 基础用法 Asp.Net Core 项目服务配置 调用 WebApplicati ...
- 聊聊RNN与seq2seq
seq2seq模型也称为Encoder-Decoder模型.顾名思义,这个模型有两个模块--Encoder(编码器)和Decoder(解码器).编码器对输入数据进行编码,解码器对被编码的数据进行解码. ...
- 【2023年更新】git 常用口令
1.已关联远程 fatal: remote origin already exists. 先输入$ git remote rm origin(删除关联的origin的远程库) 2.关联新远程 ...
- 高性能队列——Disruptor(转)
https://tech.meituan.com/disruptor.html 背景 Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中 ...
- Docker学习资料集(从入门到实践)
前言 昨天分享了一篇介绍Docker可视化管理工具的文章,然后在公众号后台收到了挺多同学的私信问:学习Docker有好的资料值得推荐的吗?想要学习Docker但是无从下手.其实之前我有断断续续的分享过 ...
- Util应用框架基础(六) - 日志记录(一) - 正文
本文介绍Util应用框架如何记录日志. 日志记录共分4篇,本文是正文,后续还有3篇分别介绍写入不同日志接收器的安装和配置方法. 概述 日志记录对于了解系统执行情况非常重要. Asp.Net Core ...
- reverse_re3
main函数 点击重要函数 对if里面的数字按r键,使其从ASCII码转为字符 发现wasd四个关键的移动方向键,判断为迷宫问题 判断应该是要次数为2,即次数++3(从0开始计数)次才会有flag 点 ...
- MySQL函数解读
一.字符串函数 1.1.instr() INSTR(str,substr)一共有两个参数str被查询字符,substr查询字符,查询时下标从1开始记,只查询第一次出现的地方,为查询到显示为0 一般用法 ...
- 背包DP全类型
AcWing 2. 01背包问题 #include <iostream> #include <algorithm> using namespace std; const int ...
- 【uniapp】【外包杯】学习笔记day06 | 微信小程序导航栏的制作并推送的到码云【黑】
先创建分支 格式化快捷键 shift+alt+f