摘要:从签发证书到数据加密交互,按流程的进展讲解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个原因保证:

  1. 会话密钥是会话级别, 动态生成的,只有这一次连接才会用到。因此以前废弃的会话密钥不用担心被人拿去利用。
  2. 建立连接并传递会话密钥之前,已经通过验签确认过对方身份是可信的。
  3. 没有任何第三方知道会话密钥是什么。因此第三方攻击人无法用正确的会话密钥加密数据,即无法做到伪造会话密钥来欺骗接收者的目的。

Q: CA根证书可能被造假吗?
例如黑客修改了用户机器中的CA证书,导致CA的公钥被替换了, 后面访问了黑客所在的网址时,就会验签成功。

A:如果真的能修改的话,那么是可行的。
但是操作系统基本会内置著名CA的公钥,除非黑客已经能直接触碰你的操作系统底层了,否则基本办不到。

五、总结和完整大图

上文的顾客就是客户端(也可以是浏览器), 店家就是服务端(网站), 工商局就是可信CA机构(或者某域内自己设置的颁发机构也行)。

而一些要点总结如下:

  • CA私钥用于签名, CA公钥用于验签
  • 要先生成摘要,再签名。目的是为了验签后确认来源是所签的服务端。
  • 服务端公钥用于加密, 服务端私钥用于解密。
  • 传输数据使用对称密钥进行加密和解密。

点击关注,第一时间了解华为云新鲜技术~

关于HTTPS认证,这里解决你所有疑惑的更多相关文章

  1. AFNetworking之于https认证

    写在开头: 本来这篇内容准备写在AFNetworking到底做了什么?(三)中的,但是因为我想在三中完结这个系列,碍于篇幅所限.并且这一块内容独立性比较强,所以单独拎出来,写成一篇. 本文从源码的角度 ...

  2. AFNetworking 之于 https 认证

    写在开头: 本来这篇内容准备写在AFNetworking到底做了什么?(三)中的,但是因为我想在三中完结这个系列,碍于篇幅所限.并且这一块内容独立性比较强,所以单独拎出来,写成一篇. 本文从源码的角度 ...

  3. 【转】AFNetworking之于https认证

    转自:http://www.cocoachina.com/ios/20161220/18393.html 写在开头: 本来这篇内容准备写在AFNetworking到底做了什么?(三)中的,但是因为我想 ...

  4. file_get_contents无法请求https连接的解决方法 php开启curl

    file_get_contents无法请求https连接的解决方法 方法1: PHP.ini默认配置下,用file_get_contents读取https的链接,就会如下错误: Warning: fo ...

  5. github pages 子域名 ( subdomain ) https 认证

    目录 说明 github pages 上的创建子域名 https 认证 说明 转载请注明出处https://www.cnblogs.com/bllovetx/p/12013462.html 欢迎访问我 ...

  6. 百度站长平台HTTPS认证所遇到的坑

    坑1: 百度站长平台https认证失败,提示:请确保您网站的所有链接均支持https访问,且未使用不安全协议(如:SSL2.SSL3等协议). 解决办法: 1.  友情链接检查, 要检查所有的友情链接 ...

  7. Linux下Apache https认证

    参考:http://kyfxbl.iteye.com/blog/1910891 http://showerlee.blog.51cto.com/2047005/1266712 一.环境 httpd:A ...

  8. https认证

    HTTPS认证 说明 1. HTTPS协议的站点信息更加安全,同时可降低网站被劫持的风险,如网站同时存在HTTP和HTTPS站点,可使用本工具进行认证,便于百度搜索识别网站HTTP与HTTPS之间的对 ...

  9. Harbor配置https认证

    Harbor配置https认证由于Harbor不附带任何证书,它默认使用HTTP来提供注册表请求.但是,强烈建议为任何生产环境启用安全性.因为测试使用,使用自签名证书: 1.创建CA证书 首先创建个目 ...

  10. CAS去掉HTTPS认证

    如何去掉HTTPS认证? 说明:默认情况下HTTP也是可以访问CAS SERVER的,但认证,登陆,退出等操作均没有任何的效果.所以必须作出下面的修改 1.进入WEB-INF\spring-confi ...

随机推荐

  1. CF48C [The Race]

    Problem 题目简述 现有 \(n\) 个已经加过油的加油站,如果当前剩余油量 \(< 10\) 升,则会加 \(x\) 升的油. 初始状态下,有 \(x\) 升油.每个加油站之间的距离为 ...

  2. QT(1)- QString

    QT(1)- QString 1 简介 在Qt中表示字符串的类是QString类,它存储字符串是采用的Unicode码,编码方式是使用UTF-16来进行编码的,也就是一个字符(两个字节),一个中文汉字 ...

  3. 数据结构-线性表-顺序表(c++)

    SeqList.h #ifndef SEQLIST_H_ #define SEQLIST_H_ #include<iostream> const int Max=100; template ...

  4. 一分钟理解TCP重传

    为什么需要重传 任何信息在介质中传输可能丢失,这是由于传输介质的物理特性决定的,所以网络不可能被设计为"可靠的"(不是由于考虑"性能"原因而是压根做不到).既然 ...

  5. oceanbase 数据库SQL优化 (把你的脑袋当成CBO)

    OB一哥们找我优化条SQL,反馈在OceanBase存储过程执行时间很慢,需要626秒才能出结果,安排. INSERT INTO insurance_stat_sx (id, stat_date, c ...

  6. EasyRE

    注意 操作等级 亦或的操作优先级比减号低 C++运算符优先级_c++运算符的优先级顺序-CSDN博客 转换 还有注意一般都是小端存放,所以这里要逆序输出

  7. influxdb: unable to parse points 异常解决总结

    转载请注明出处: influxdb 使用过程经常遇到:unable to parse points  的异常:  unable to parse points 是 InfluxDB 抛出的异常,表示无 ...

  8. serdes IP集成使用常见踩坑问题

    1.不支持小数分频,或者小数分频后频偏过大部分速率配置无法使用. 2.CDR 不稳定,经常无法锁定,或者温变时出现失锁情况,以及cdr lock信号无法准备上报状态. 3.CORE内部多个lane之间 ...

  9. 后端程序员必会的前端知识-03:Vue2

    三. Vue 2 1. Vue 基础 1) 环境准备 安装脚手架 npm install -g @vue/cli -g 参数表示全局安装,这样在任意目录都可以使用 vue 脚本创建项目 创建项目 vu ...

  10. setup的执行时机

    setup是在beforeCreate之前执行的,也就是vue实例还未被创建,因为setup中并没有this指针 <script> export default { setup() { c ...