浏览器提示的"不安全"到底是什么?

0. 前言

3月中旬的某天, 某个小破站突然每篇头条动态下面都冷冷清清, 一个评论都没有了.

我赶忙翻了翻, 在一处看到一则公告: 为响应国家<网络信息内容生态治理规定>, 本站暂时关闭回复, 转发功能.

点开这个公告, 下面还附了这条规定的链接. 出于好奇, 我决定点进去浏览一番.

然后, 我看到了地址栏左侧几个有些扎眼的字: 不安全.

这个不安全到底指啥? 我点击了它左边的"i", 结果看到了一行红字:

啥? 这也太吓人了吧, 要是个个网页都这么不安全, 那我不是早就"体无完肤"了吗? 这大概就是所谓的"naked in the cyberspace"?

吓得我赶紧看看平时用的搜索引擎是啥样子的:
在这里插入图片描述

在这里插入图片描述
嗯, 很"安全", 可以松口气了.


实际上, 大家或许都知道, 这个所谓的安全和不安全, 指的是网站是否采用了SSL(Secure Sockets Layer, 安全套接层)技术进行加密, 不过现在其实应该叫TLS(Transport Layer Security, 传输层安全性协议), 或者更为人所熟知, 就是HTTP(HyperText Transfer Protocol, 超文本传输协议)和HTTPS之间的区别, 那个多出来的S就是Secure(安全).

但是, 晚上用手机浏览网页的时候, 搜索引擎的链接左边那个图标又不是令人安心的锁形, 而是那个代表了不安全的"i", 我点进去一看, 看到了一段微妙的话:

大意是, 虽然网页本身是安全的(用了HTTPS), 但是网页加载的别的资源不是安全的(没用HTTPS), 所以这个网站还是不太安全.

为什么会这样呢? 终于, 正文要开始了.


1. HTTP变成了HTTPS

HTTP设计之初是为了提供一种发布和接收HTML(HyperText Markup Language, 超文本标记语言)页面的方法. HTML页面记录了这个网站长什么样子, 上面分别有些啥东西, 既可以直接写网页上显示出来的文本, 也可以记录一个地址, 让网页加载的时候再从别的地方请求资源. 但是, HTTP的问题迅速暴露了出来: 不安全. 所以在HTTP发起(1989年)后5年, HTTPS就被提出了(1994年).

说了半天, 何谓不安全? 简而言之, 在网页上输入账号和密码并点击登录的时候, 账号和密码这两个字符串被打包, 抑或是分别被以某种方法加密甚至可能不加密, 然后发送给服务端. 虽然, 信息会被以某些算法加密, 比如说常见的RSA加密算法(首字母是三个发明者的姓氏首字母, 就不写了), 但是只要能获取到这个被加密的信息, 还是很有可能可以"黑"进账号, 只要能够模拟出来向服务端发送这个包就可以了, 相当于绕过网页对信息的打包和加密(俗称发包), 然后大概率就能直接登陆进去了, 根本不必知道密码明文到底是什么.

所以, HTTPS被提出, 要求在HTTP层与TCP(Transmission Control Protocol, 传输控制协议)层之间加上一个带有加密的层, 也就是TLS/SSL. 由于这个加密层将几乎所有的东西都加密了, 而不仅仅是账号和密码的明文, 所以他人只能知道存在这么一个网络连接, 但是里面的内容几乎不可能看到.

至于上述的"层"是什么, 简单来说, 可以想到每个人的网络设备(比如手机或者电脑)都有不同的硬件, 不同的系统, 安装了不同的软件, 但是对每种组合都写一份代码是不现实的, 所以设计时将其分层, 物理层处理不同的硬件, 把它转化成较为统一的接口, 也让别的层可以专注于实现自己的功能, 大概也可以看作是一种模块化. 而HTTP就是为了收发HTML页面, TLS就是为了加密.

2. HTTPS里面还是HTTP

HTTPS是好, 但是这个S是基于网络证书的, 简而言之, 就是服务端向某些有公信力的机构提出申请证书, 然后以某种方式证明自己拥有这个服务端, 然后机构颁发一个有时效的证书, 包含了加解密信息, 服务端便用这个证书加密客户端与服务端之间的信息, 浏览器看到这个颁发证书的机构是自己认识的, 就说这个连接是安全的, 以防有人伪造证书.

这个证书, 一来一般是要钱的这些机构也是要恰饭的对吧, 二来需要按照域名申请, 本身申请这件事情就是蛮麻烦的. 总之, 出于各种原因, 一个网页可能不能全上HTTPS内容, 就会在HTML文件里写请求HTTP的连接, 比如说一些广告嵌入就这么干.

这个HTTP, 看似只要不用来传输我的账号密码就行了, 但是, 它可以通过一些奇技淫巧(比如内嵌某些代码)来获取, 或者是获取些别的信息, 或是别的操作. 总而言之, 还是存在隐患的.

下面就给大家展示一下纯HTTP, 纯HTTPS, 和HTTPS中含有HTTP资源, 浏览器都会给出什么样子的提示:

纯HTTP


纯HTTPS


在这里插入图片描述

HTTPS中含有HTTP资源

这是在手机上, 信息不是很全, 在电脑上又能看到啥呢? 使用DevTools, 模拟客户端标识为移动端:

哎, 又是不安全. 查看网页信息, 在Console中能看到这些东西:

第四条消息(以Mixed Content开头的那条)写道, 这个网页用HTTPS加载, 但是又请求了一个不安全的(HTTP)资源. 打开这个地址可以看到是一张图片.

现在是用PC端浏览器请求移动端网页的效果, 那如果不模拟成移动端呢?

欸, 它又好了?


访问同一个网站,用手机的用户标识就显示"不安全",但是用PC端的用户标识就显示"安全".

说实话, 我不知道这么设计是为什么, 可能是用加密层要花更多时间和流量, 也有可能是电脑上的浏览器的某些插件在作祟(褒义的那种), 但是从此可以联想到, 你是不是曾经有过在手机看网页, 突然跳出了一个广告, 还是关不掉的那种, 那有可能就是因为这个看似安全的HTTPS里面夹杂着HTTP内容所致.

当然, 有人会说, 还很有可能是DNS(Domain Name System, 域名系统)被劫持了. 简而言之就是你向域名解析服务器请求了网址A的IP地址, 但是由于DNS请求也是非加密的, 所以这个请求被中间人换掉了, 所以你得到了网址B的IP地址, 就去了另一个你不想去的网站. DNS劫持实际上可能在这种弹出广告的劫持中占比比较高, 但是你有没有考虑过, 为什么电脑上这种广告似乎就是比手机上看到的次数(频率)要少, 即使考虑可能看手机的时间比看电脑的要多.

因此, 为了杜绝这种事情, 有浏览器厂商站出来, 称要把这些可能造成信息泄露的行为或方法(说的就是你, Flash)全部禁用, 根本不让你访问这种网站, 或者不允许加载这些内容, 比如Chrome.

现在再去看看你平时浏览的网站, 是不是发现有不少都或多或少地不太"安全"?

3. 结尾语

此文起于一个偶然, 所以就顺手写了下来, 权当成随笔, 也可能写得不很严谨.

本文绝大多数内容源于维基百科, 有需要或者兴趣的话可以参阅, 或者直接看IETF, 关键字基本都被列了出来, 并且其英文缩写的字母都被加粗了.

觉得有用的话,不要吝惜评论点赞分享哦,希望大家多多包涵,有任何问题欢迎指正、讨论。
本文基于CC-BY-SA 4.0协议,欢迎转载
(博客看累了?去我的B站瞧一瞧?)

发布了19 篇原创文章 · 获赞 212 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_27133869/article/details/105317008