所谓常识 - 加密的网页,安全的一部分

现在这世道,什么监听、假 Wi-Fi 层出不穷,我们的网络连接一点都不安全。就像是寄一封信,信里的内容可以被随便看、任意改,到了收件人那,自己也不知道信的内容是真是假。(不过,中国法律是保护信件通信隐私的。)

为什么成了这样子?最早设计互联网的时候,大家都是互相信任的,觉得互联网不会很大,坏人很少,没必要上什么加密,毕竟加密解密这个过程也比较很复杂。

现在互联网这么大,网页的加密连接也使用得越来越普遍,甚至下一代的网络协议可能会强制使用加密。有点基本的知识,知道自己的网页连接安全与否,还是很有好处的。

一、加密网页的形式

我们这里只讨论协议层的加密。就是所谓的 HTTP 和 HTTPS。HTTP 是非加密的,HTTPS 是加密的。

简单说,这就像明信片和信封的区别。HTTP 是明信片,传输的时候大家可以随便看内容,甚至换成另一张明信片再发给你。而 HTTPS 就没法随便看了,不过加密的效果比信封还要好。

只要 HTTPS 使用的具体加密协议(比如 TLS)和服务器证书足够强(跟浏览器无关),就能达到理想状况下的效果:中间环节的传输者(我们简称中间人好了)只能看到收发人的地址和证书,不能看到访问地址里的具体路径乃至传输内容。并且,只要不是服务器泄密,中间人也无法用一模一样的证书,生成一个假的传输内容来篡改。

二、怎么加密

怎么加密的问题还是挺难的。目前常用的加密协议是基于难解的数学问题的,也就是说,想破译不是不可能,只是要算上至少几个月。

刚才的描述,出现了证书这个词。这是加密的要素,也是我们需要经常关心的东西。我们只需关心服务器证书,它可以证明服务器就是那台服务器,通常跟域名绑定在一起。

证书里会有公钥和私钥。公钥是服务器发给我们看的,可以随便传,用来加密。私钥是用来解密的,不能泄漏。

密码学这块,没有深入的学习,是很难解释清一些具体问题的。我也只是大概懂得,他用数学问题来加密,相对足够安全,别的实现细节也不大懂了。

但互联网的好处就是,你不懂,也能用,因为太多牛人帮你踩过那块踏板了,踏板现在不会塌。

三、发证书的人

即便我们不懂原理,证书的一些知识我们还是要懂的。

比如,大家都能做证书,怎么鉴别真伪呢?靠诚信。

全球有几十家大证书机构,他们下面还授权了很多小一点的公司,发证书。那些最大的证书机构的根证书,基本上所有的操作系统里都会默认信任,也就是他们签发的证书都会绿灯通过。那些小一点的证书公司,会通过一层层证书的信任关系,来确保自己的证书被操作系统信任。

Windows 自带的部分信任根证书

不同等级的证书机构,能发的证书等级也不同,价格也不一样,比如能在电脑浏览器地址栏显示公司名的证书就挺贵的(喂,不是 360 的提示!)。最贵最老牌的证书莫属 VeriSign 的了,买他的基本上都是土豪。

这就是那种很贵的证书的效果

证书机构采取非常严格的流程,来确保发证书不出错。如果哪家人犯了错,马上他的证书会被不信任,他会死得很惨,国际名誉全失,毫无翻身之处。而且这是真的,发生过几次了。

问题来了,有时我们会被提示下载“根证书”,实际上这是十分不安全的。导入根证书的过程,就是额外信任某家证书机构签发的所有证书,就是像给别人你家里的钥匙。这些自签发证书,如果管理不善,被人利用,后果就是你的加密网页被篡改,你却全然不知。即便查到了,对他们没有什么强制的惩罚措施,不像前面我们讲的那些默认被操作系统信任的根证书。

所以,除非迫不得已,机智的人不会去安装不信任的根证书,而会用其他信任单张证书的办法。我们铁老大的 12306 就是不信任证书的典范。问题来了,为什么他们不去买别人的证书,而是用自己签发的证书呢?除了“我们没钱也不知道怎么买证书”(这点已经被证明是错的) 、“我们的证书不能掌握在外人和外国人的手中”和不能说的原因,我也不知道。

四、辨认证书

服务器证书对了,基本上加密就妥了。怎么辨认证书呢?听起来很难的样子。

首先,我们要假定,我们信任操作系统里的所有根证书,也就是操作系统信任的证书签发机构的列表。

一般这个没啥大问题,只要自己不乱装根证书,就只管预装的大公司就好。如果谁家被不信任了,这会是个大新闻(除了 C〇〇IC 的)。

所以呢,我们先要信任一些公司。

然后,浏览器访问加密网页的时候,一般会用操作系统的信任列表来校对证书。操作系统不信任的证书或者不正确的证书,浏览器会跳出不安全提示。

通常,跳出不安全提示,有几种情况:

  1. 证书是不信任的机构发布的,比如那是自签发证书。
  2. 服务器的证书绑定的域名跟实际访问的域名不同。
  3. 证书有效期过了。
  4. 其他一些浏览器觉得有问题的情况。

1、2 点是相对比较危险的。我们说过中间人,他不能拆你的信封,也不能改信里的字,只能用整封信调包的办法,假装他是通信的对方(服务器),然后骗你把你想说的话告诉他。

但是,他没有服务器证书的完整部分(私钥),他并不能产生原来服务器证书一样的效果。所以,他只能自己签一个那个域名的证书,一般就不会被信任(如果能拿到信任的服务器证书,会有前面提到的爆炸性后果)。或者,他干脆就用其他域名的受信任的证书来代替,就会出现证书跟实际访问域名不符的情况(比如他自己的域名,自己的域名是可以得到合格证书的)。

如果你在这种时候,浏览器弹出不安全提示的时候,点了信任,那你的加密连接就一点都不安全了。当然,有的弱智浏览器,遇到不安全的情况,会直接忽略掉,假装是安全的,接着连接,那就没辙了。

于是我们怎么辨别证书呢?我们只要在浏览器提示不安全的时候,小心行事就好了

比如,证书机构不信任,我们就要看看那个网站是不是重要的网站,如果是的话就不能信任,不是的话,说不定人家不在意不信任的问题(尤其是企业内网的网站),就过去咯。当然,会看证书是哪个机构签发的,再来判断,就更好了(但正常人才不会熟悉那些保护你安全的幕后人物呢)。

服务器域名不匹配,要看两个域名之间有没有关系,是不是同一家人的。如果是,那可能是那个服务器同时给这几个域名提供服务,然后证书配置错了或者没钱给所有域名买证书,那还可以信任。否则就是冒牌货咯,不要瞎点信任

五、一点小测试

这两个网站,如果你打开的时候提示安全错误,或者干脆空白页,那恭喜你,你的浏览器大概可以保护你的加密连接了。

https://www.icourses163.org/

https://www.icourses163.org/

为什么出错呢?这是因为这个域名和 study.163.com 是同一个服务器,其实是可以放心访问的。但是有时候就不能放心啦。

https://kyfw.12306.cn/

如果你没装过铁老大的根证书或者单独信任过他,就会出错。那就对了,他们这份证书是自己签发的,没“公信力”。

对的,并不一定需要“导入根证书”。你可以单独信任这一个域名的证书,这么做是最安全的,不需要信任根证书。(比如,在 Firefox 中,你得点“我已充分了解可能的风险”,按提示增加例外,就可以单独信任)

六、最重要的:安全是一个系统

前段时间网上大 V 界在加密网页这件事上闹了一阵。论题是,在免费 WiFi 上,用加密网页就安全了,是这样吗?

双方其实不爽的是,措辞和应该怎么跟公众宣传。我觉得那个题的答案是,加密连接下,你的连接是安全的,但是,你的非加密连接安全吗?你的手机上有没有木马程序呢?你身后是不是有个猥琐男在看你密码呢?

安全是一个系统,就像所谓的短板效应。学会识别加密网页,这很重要,但不是全部。安全之所以难,难在处处有可能有漏洞,只要一个地方有洞,就败了。

所以,这就是世道啊。钻空子的人,永远都有。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

To respond on your own website, enter the URL of your response which should contain a link to this post's permalink URL. Your response will then appear (possibly after moderation) on this page. Want to update or remove your response? Update or delete your post and re-enter your post's URL again. (Find out more about Webmentions.)