seegongsik
我的单词本
网络

锁住不让偷看,HTTPS

想象把密码写在明信片上寄出去。沿途经手的任何人都能看一眼。普通的 HTTP 正是这样:你来往的内容就明明白白摆在路上。那怎么才能放心地把卡号通过网络发出去呢?这个秘密就是 HTTPS。

01

中间有人偷看

像上一讲看到的,
HTTP 是来回收发请求和响应的约定。
可那些内容
就以字面原样在路上经过。
待在中间的任何人
瞥一眼就全读到了。
密码、卡号,全都是。
就跟寄明信片一样。
经手的每个人都能读。

>
PW: 1234
#
网站
点一下路上的“中间人”偷看

点一下路上的“中间人”,偷看用明文 HTTP 发的消息。秘密一览无余。

现在知道会被偷看了,
因为内容明摆在路上。
那怎么防呢?
我们没法堵住路,也没法除掉中间人。
互联网本来就要过很多手。
所以换个思路。
让它被看到也读不出来就行。
把内容用锁锁住。
这就是下面的故事。

02

用锁锁起来

解决的第一步是上锁。
发出去之前先把内容打乱,
让人认不出来。
这叫加密。
锁住的内容字是乱的,
中间人看了也不懂意思。
只有收的一方把它解开,还原成原文。
就像把明信片装进上锁的盒子寄出去。
看得到盒子,看不到里面。

中间人能读
点一下消息把它锁住(加密)

点一下消息把它锁住(加密)。锁住后字是乱的,中间人看了也读不出来。

锁上后中间人看了也读不出来。
让人放心。
可有一处难点。
锁住的东西得让收的一方解开。
那就得把钥匙交过去。
可要是把钥匙也顺着路寄过去,
中间人连钥匙一起拿走。
那就等于锁了又把钥匙一起寄。
这个两难怎么解?

03

锁可分发,钥匙只我有

有个巧妙的办法。
把锁和开锁的钥匙分开。
锁谁都能拿去
只能用来锁上。这叫公钥。
用它锁住的东西只有用我的私钥才能开。
所以锁撒在路上也没关系。
它只能锁,开不了。
用收件人发来的锁锁好寄回去,
就只有那个人的私钥才能解开。

[ ]PW: 1234
先用收的一方给的公钥(锁)锁住

收的一方给出公钥(锁)。用那把锁锁好发出去,就只有那个人的私钥能开。中间人的钥匙开不了。

现在钥匙的两难解开了。
锁可以随便分发,
因为开锁的私钥只在我手里。
就算中间人捡到锁,
也只能锁,开不了。
可还剩一件事。
把锁递给我的那个对方,
真的是我要找的那个网站吗?
万一是假的递来的锁呢?

04

确认是不是真的

最后一块是确认身份。
网站连同锁,
还递出一张叫证书的身份证。
那是可信机构开出的凭证。
收的一方看那张证书,
确认“噢,真的是那个网站”。
假网站拿不出这样的凭证。
所以证书对不上时,
就会弹出警告把我们拦下。

[?]
mybank.com
[?]
rnybank.com
点每个网站的证书确认真假

两个网站各递出证书。逐个点一下确认真假。真的通过,假的弹出警告。

现在全齐了。
内容用锁锁住读不出来,
开锁的私钥只有我有,
再用证书确认对方是真的。
这三样凑齐,
中间有人也放心。
看了读不出,假的会露馅。
地址栏里那个锁的图标,
正是这套约定开着的标志。

05

来理一理

归成一句话,是这样。
普通的 HTTP 是明文,所以中间全看得见。
HTTPS 把内容用锁锁住(加密)。
作为锁的公钥分发给任何人,
锁住的东西只有我的私钥才能开。
再用证书确认对方是真的。
所以卡号也能放心发送。
HTTPS 就是网络旅程上最后一道锁。

依次点要点回顾一下

依次点要点回顾一下。(明文会被偷看 → 用锁锁住 → 锁可分发私钥只我有 → 用证书确认真假)

网络的故事到这里就讲完了。
从什么是网络,
到数据包、找路、地址、可靠送达,
再到锁住不让偷看。
一个小小的字怎样跨过互联网,
不丢、正确、安全地到达,
这一切的约定我们一起看完了。
辛苦了。从今往后看互联网时,
你会看见它背后的那些约定。

一句话总结普通的 HTTP 内容是明文,所以中间任何人都能偷看。HTTPS 把内容用锁锁住(加密),就算半路被看到也是乱码读不出来。核心想法有两点。一,公钥是一把谁都能拿的锁,可它锁住的东西只有用你的私钥才能开。二,先用证书确认对方真的是那个网站。所以卡号也能放心地通过网络发送。这就是 HTTPS。
网络
如果有帮助,请支持我们