0. 前言
3月中旬的某天, 某个小破站突然每篇头条动态下面都冷冷清清, 一个评论都没有了.
我赶忙翻了翻, 在一处看到一则公告: 为响应国家<网络信息内容生态治理规定>, 本站暂时关闭回复, 转发功能.
点开这个公告, 下面还附了这条规定的链接. 出于好奇, 我决定点进去浏览一番.
然后, 我看到了地址栏左侧几个有些扎眼的字:
不安全
.
这个不安全到底指啥? 我点击了它左边的”i”, 结果看到了一行红字:
啥? 这也太吓人了吧, 要是个个网页都这么不安全, 那我不是早就”体无完肤”了吗?
这大概就是所谓的”naked in the cyberspace”?
吓得我赶紧看看平时用的搜索引擎是啥样子的:
嗯, 很”安全”, 可以松口气了.
实际上, 大家或许都知道,
这个所谓的安全和不安全, 指的是网站是否采用了SSL
(
S
ecure
S
ockets
L
ayer, 安全套接层)技术进行加密, 不过现在其实应该叫
TLS
(
T
ransport
L
ayer
S
ecurity, 传输层安全性协议), 或者更为人所熟知, 就是
HTTP
(
H
yper
T
ext
T
ransfer
P
rotocol, 超文本传输协议)和
HTTPS
之间的区别, 那个多出来的S就是
S
ecure(安全).
但是, 晚上用手机浏览网页的时候, 搜索引擎的链接左边那个图标又不是令人安心的锁形, 而是那个代表了不安全的”i”, 我点进去一看, 看到了一段微妙的话:
大意是, 虽然网页本身是安全的(用了HTTPS), 但是网页加载的别的资源不是安全的(没用HTTPS), 所以这个网站还是不太安全.
为什么会这样呢?
终于, 正文要开始了.
1. HTTP变成了HTTPS
HTTP设计之初是为了提供一种发布和接收HTML(
H
yper
T
ext
M
arkup
L
anguage, 超文本标记语言)页面的方法. HTML页面记录了这个网站长什么样子, 上面分别有些啥东西, 既可以直接写网页上显示出来的文本, 也可以记录一个地址, 让网页加载的时候再从别的地方请求资源. 但是, HTTP的问题迅速暴露了出来: 不安全. 所以在HTTP发起(1989年)后5年, HTTPS就被提出了(1994年).
说了半天, 何谓不安全? 简而言之, 在网页上输入账号和密码并点击登录的时候, 账号和密码这两个字符串被打包, 抑或是分别被以某种方法加密
甚至可能不加密
, 然后发送给服务端. 虽然, 信息会被以某些算法加密, 比如说常见的RSA加密算法(首字母是三个发明者的姓氏首字母, 就不写了), 但是只要能获取到这个被加密的信息, 还是很有可能可以”黑”进账号, 只要能够模拟出来向服务端发送这个包就可以了, 相当于绕过网页对信息的打包和加密(俗称发包), 然后大概率就能直接登陆进去了,
根本不必知道密码明文到底是什么
.
所以, HTTPS被提出, 要求在HTTP层与TCP(
T
ransmission
C
ontrol
P
rotocol, 传输控制协议)层之间加上一个带有加密的层, 也就是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
(
D
omain
N
ame
S
ystem, 域名系统)被劫持了. 简而言之就是你向域名解析服务器请求了网址A的IP地址, 但是由于DNS请求也是非加密的, 所以这个请求被中间人换掉了, 所以你得到了网址B的IP地址, 就去了另一个你不想去的网站. DNS劫持实际上可能在这种弹出广告的劫持中占比比较高, 但是你有没有考虑过,
为什么电脑上这种广告似乎就是比手机上看到的次数(频率)要少, 即使考虑可能看手机的时间比看电脑的要多.
因此, 为了杜绝这种事情, 有浏览器厂商站出来, 称要把这些可能造成信息泄露的行为或方法(说的就是你, Flash)全部禁用, 根本不让你访问这种网站, 或者不允许加载这些内容, 比如Chrome.
现在再去看看你平时浏览的网站, 是不是发现有不少都或多或少地不太”安全”?
3. 结尾语
此文起于一个偶然, 所以就顺手写了下来, 权当成随笔, 也可能写得不很严谨.
本文绝大多数内容源于维基百科, 有需要或者兴趣的话可以参阅, 或者直接看
IETF
, 关键字基本都被列了出来, 并且其英文缩写的字母都被加粗了.
觉得有用的话,不要吝惜评论点赞分享哦,希望大家多多包涵,有任何问题欢迎指正、讨论。
本文基于CC-BY-SA 4.0协议,欢迎转载
(博客看累了?去
我的B站
瞧一瞧?)