摘要:从签发证书到数据加密交互,按流程的进展讲解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. Windows虚拟机环境下Linux设置固定IP地址

    Linux 设置固定IP地址 安装环境是VMware Workstation Pro 15 安装完linux之后需要做的第一件事就是配置网络,有了网络我们可以下载插件,使用xshell工具连接等等 i ...

  2. Codeforces Round 823 (Div. 2)C

    C. Minimum Notation 思路:我们可以进行的操作时将一个位置的数删除然后在任意位置处添加一个比当前数大1并且小于9的数,所以我们的操作只会让一个数变大,我们统计一个最大值的后缀,贪心的 ...

  3. 把 map 中的 key 由驼峰命名转为下划线

    import cn.hutool.core.util.StrUtil; /** * 把 map 中的 key 由驼峰命名转为下划线 */public HashMap<String, Object ...

  4. DP:打家劫舍

    你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警. 给定一个代表每 ...

  5. 算法训练 递归 s01串

    问题描述 s01串初始为"0" 按以下方式变换 0变1,1变01 输入格式 1个整数(0~19) 输出格式 n次变换后s01串 样例输入 3 样例输出 101 数据规模和约定 0~ ...

  6. Django的staticfiles库

    staticfiles 库是 Django 提供的一个用于管理静态文件的库,它提供了一些工具和函数来帮助开发者在 Django 应用程序中管理和提供静态文件服务. 在 Django 应用程序中,静态文 ...

  7. .net 下优秀的DI框架推荐,看看你用过几个?

    在.NET生态系统中,有许多出色的依赖注入(DI)框架可供选择.每个框架都有其独特的特点和优点,可以根据项目需求和偏好进行选择.下面详细介绍一些.NET中优秀的DI框架,它们的优点以及适用场景. 1. ...

  8. Vue3+Vite+ElementPlus管理系统常见问题

    本文本记录了使用 Vue3+Vite+ElementPlus 从0开始搭建一个前端工程会面临的常见问题,没有技术深度,但全都是解决实际问题的干货,可以当作是问题手册以备后用.本人日常工作偏后端开发,因 ...

  9. K8s容器debug高级技巧

    使用 kubectl exec 执行指令 如果您在 Kubernetes 上运行软件,您会想要在某些时候去调试您所部署的软件的一些方面.对于习惯于使用虚拟机 (VMs) 的人来说能自然使用的一种简单的 ...

  10. 'parent.relativePath' of POM com.qbb:log_record_elegant:1.0-SNAPSHOT points at com.qbb:qiu_code instead of org.springframework.boot:spring-boot-starter-parent

    完整的错误: 'parent.relativePath' of POM com.qbb:log_record_elegant:1.0-SNAPSHOT (F:\QbbCode\qiu_code\log ...