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

现在这世道,什么监听、假 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 上,用加密网页就安全了,是这样吗?

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

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

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注