首页 网络技术
  1. 正文

HTTPS 工作原理是如何保护安全的

多年以前,我还在上大学的时候,曾经听学长说起他打过的一份工,每个月可以赚不少零花钱。这份工作非常简单,就是去互联网上流行的各种网站、手机上流行的各大 APP 以及各个网站的手机浏览器版本(WAP、H5 之类的)执行一些基本的操作,包括注册、登录、操作具体业务等,比如航空类的网站就尝试查询航班、购买机票,团购类的网站就尝试搜索美食、发布评价……

在操作的同时,通过 Wireshark 这样的抓包软件把所有的通信包全部记录下来并分析其中的 HTTP 数据,你会发现账号、业务内容等信息绝大部分都以明文形式在互联网上流动,即使少部分看起来是乱码,经过简单的解码、解密,也可以快速获取原文。

学长告诉我这样的世界太不安全了:想要通过互联网完成任何一件事情,你都需要从电脑或手机发起一系列 HTTP 请求,这些请求通过一层层的路由,最终送到千里之外的某台服务器。

在这个过程中,你同宿舍的室友可能在偷看你的聊天,你的学校也可能以安全为由监控着你的行踪,还有一些不法分子在暗中记录你的账号和密码;在这个过程中,许许多多的钓鱼网站通过拦截你的网络,假冒银行、政府,获取你的信任,套取你的信息;在这个过程中,运营商可能为了利益,在你正常浏览的网页中嵌入了生硬的广告,篡改了原始的页面内容……

直到我们有了 HTTPS —— 它简直就是这一切的「救世主」。

HTTP 带来的风险

HTTPS,中文名是「超文本传输安全协议」(HyperText Transfer Protocol Secure),它以 HTTP 为基础,为 HTTP 提供额外的加密和认证。这也正是其名字的由来:HTTP + Secure。

可以这么理解,http是裸着的,https是穿着内裤的。

证书,一个文件袋

经过和少数派的第一次通信,你拥有了一张证书;或例如使用 Google Chrome 打开少数派网站,地址栏的左侧会出现一把小锁。点击之后,可以查看证书的详细情况:

HTTPS 工作原理是如何保护安全的

者说是一个文件袋,里面装满了各种文件,可供查验和使用。你可以在任何浏览器中看到这张证书。

HTTPS 工作原理是如何保护安全的

这张证书主要包含以下信息:

  1. 证书颁给了哪个或哪些网站(使用者)
  2. 证书的有效期的起止时间(有效期)
  3. 一个公钥
  4. 证书是由谁颁发的(颁发者)

接下来,你会一一对这些信息进行处理。

第一项很好理解,使用者,就是这张证书对谁有效。你看了一眼,嗯,*.sspai.com,这是一个通配符域名,意思就是对所有 sspai.com 的域名都有效。好的,它确实符合少数派网站的网址,验证通过。

第二项,有效期,也很容易。你在自己的电脑上查了一下时间,2021 年 8 月,确实是在有效期区间内,好的,验证通过。

第三项是一个 公钥,先存下来后面用。

第四项,颁发者,虽然你知道了这张证书是由一个叫做 RapidSSL TLS DV RSA Mixed SHA256 2020 CA-1 的人颁发的。但这个人又是谁,他值得信任吗?

HTTPS 工作原理是如何保护安全的

这就要看证书中的最后一项内容,证书路径。在这里,我们可以通过一个树形图,清晰地看到我们当前这个证书的信任链。对于列表中的每一项,都可以通过右下方「查看证书」按钮,读取到这一项的证书信息。

也就是说,列表中的每一项其实都是一张完整的证书。在这个例子中:

  • RapidSSL TLS DV RSA Mixed SHA256 2020 CA-1 保证了 *.sspai.com 的证书是可信任的
  • DigiCert 保证了 RapidSSL TLS DV RSA Mixed SHA256 2020 CA-1 的证书是可信任的
  • 浏览器,或者操作系统,充分信任 DigiCert(浏览器或操作系统会维护一个受信任的列表)

因此,随着一层层的信任关系你也就信任了 *.sspai.com 这张证书;这种信任带来的最重要的意义在于——你相信,证书中包含的那个「公钥」确实是属于少数派的,而不是其中任何一个邮差伪造的。

所以,证书带来的结果就是:你拥有了一个确信是少数派的公钥。

HTTPS 的初次加密尝试

公钥就像是从证书这个文件袋中捎过来的一个信封,一旦封口,就只有证书拥有者使用私钥才可以打开;换言之,你只要用这个信封寄送,那么就只有少数派可以读到(啊,用于封口的是 一种神奇的胶水,这是由数学原理保证的)。

你可以放心地使用从证书中找到的这枚公钥。如果你决定试一下,便可以生成一个随机数 36721,写在明信片上,然后兴致勃勃地把明信片装进信封,仔细地封好口子。

【这是只有你和少数派才可以看到的内容】

现在,你交给邮局的不再是体无遮拦的明信片,而是一个信封。邮差看不到信件的内容,他只知道这封信送往何处;少数派成功收到了这封信,并使用少数派的私钥拆开了信封。最后一个随机数成功送达。

整理一下。结合前面的「问候」过程,现在你和少数派双方手上拥有:

  1. 一个双方都认可的加密算法 TLS_RSA_WITH_AES_256_GCM_SHA384,邮差可以偷看
  2. 一个少数派生成的随机数 785391,邮差可以偷看
  3. 一个你生成的随机数 11872,邮差可以偷看
  4. 另一个你生成的随机数 36721,只有你和少数派知道

通过这些信息,你和少数派会各自使用三个随机数和算法,计算出一个称为「会话密钥」的密码。由于随机数和算法都已经确定,因此你和少数派计算出的「会话密钥」必然是一致的;假设这个计算出来的密码是 1627638。

你们事实上完成了一件很有意思的事情:在所有聊天内容都会被人偷看的情况下,你们成功交换了密码。这使得后续的秘密聊天成为可能。交换密钥的方法也还有很多,这里仅仅展示了其中的一种。

愉快的秘密通信

好了,最后,你们可以使用前面制作的 1627638 这个密码来进行后面的聊天。

这个密码用起来就方便多了,只要双方通过 一个带密码锁的小盒子 来互相通信,那路上的邮差就肯定打不开。

暴力解锁?密码复杂度保证了即使用人类最顶级的计算机,也无法在有生之年把密码猜出来。(1627638 这只是个例子,实际使用当然不可能这么短小)

你把想问的问题(我的私信?)塞进了密码锁,并把密码锁的密码设为 1627638,锁上之后打乱密码锁。

少数派拿到了这个密码锁,通过 1627638 解开密码锁。同样的,少数派会把你的私信内容也用 1627638 锁上,寄回给你。

最后,你还是用 1627638 解锁私信内容,秘密通信顺利完成。

再来回头看看最开始 HTTP 遇到几个风险,在 HTTPS 中是如何解决的:

  1. 邮差知道了你的私信内容、姓名和密码:在 HTTPS 中,由于通信使用 1627638 这个密码锁来加密,所以路上的邮差不可能知道信件的内容
  2. 无法确定到底是不是少数派给出的答复:在 HTTPS 中,证书的信任链保证了「公钥」的可信度,而公钥和私钥的匹配认证了少数派的身份
  3. 捣蛋的邮递员修改了信件内容:在 HTTPS 中,由于使用了密码锁,邮差读不了邮件,也无法写入信件

所以通过这稍显复杂的 HTTPS 通道,我们最终解决了 HTTP 的一些风险。

HTTPS 已随处可见

现在几乎所有主流的浏览器都已经用比较强烈的视觉效果区分了 HTTP 和 HTTPS 网站,例如 Google Chrome,访问少数派网站时,地址栏前方的标识是一把寓示着安全的小锁,点开则提示「连接是安全的」:

HTTPS 工作原理是如何保护安全的

而如果访问一个使用 HTTP 的网站,则会直接显示「不安全」:

HTTPS 工作原理是如何保护安全的

当访问的网站,虽然正常完成了「问候」的过程,但是从服务器取到的证书存在或多或少的问题时,浏览器会阻断你们之间的通信:

HTTPS 工作原理是如何保护安全的

即使通过「高级」按钮底下的选项坚持访问,浏览器依然会时刻把「不安全」标注为醒目的红色:

HTTPS 工作原理是如何保护安全的

这样激进的措施曾经饱受争议,但是浏览器这样的强制性的行为却带来了非常好的结果。时至今天,我们已经很少见到有哪个网站还只支持 HTTP 访问,也很少见到证书错误的情况。以至于当我们说起互联网的时候,我们已经很难想象,当年那样几乎完全基于 HTTP 的通信是多么不可靠、不安全。

本文标题:HTTPS 工作原理是如何保护安全的
本文链接:https://www.qqooo.cn/post/420.html
版权说明:网站文章均来源于手工整理和网友投稿,若有不妥之处请来信 feelym@88.com 处理,谢谢!