公众号旧文

为什么浏览器总说 HTTP 不安全?

作者:胖子阅读 —

上篇文章我发现有人每天在拿我的服务器测速发出后,有读者在评论区截图指出,下载我的测速文件:http://156.246.91.170:18080/100M.bin

会被浏览器提示“不安全”:

图片

这篇文章,咱们就来说说,HTTP为什么会“不安全”。

浏览器对 HTTP 连接的警示,真正想表达的是:

这个连接没有加密。

互联网最早使用的网页协议是 HTTP。 HTTP 有一个很大的特点:所有数据都是明文传输。

也就是说,当你访问一个 HTTP 网站时:

  • 用户名
  • 密码
  • 表单数据
  • 网页内容

在网络中都是可以被直接看到的。

如果有人在中间监听网络,比如:

  • 公共 WiFi
  • 被入侵的路由器
  • 运营商节点

这些数据就可能被读取。

后来互联网引入了 HTTPS,它在 HTTP 之上加入了一层加密协议: Transport Layer Security(TLS)。

简单来说:

协议 特点
HTTP 明文传输
HTTPS 加密传输

而且 HTTPS 还有一个重要功能:

验证服务器身份。

服务器会提供一个 SSL Certificate,浏览器会检查:

  • 证书是否合法
  • 证书是否属于这个网站

如果不匹配,浏览器就会直接报警。

所以浏览器标记 HTTP 为“不安全”,并不是说网站有问题,而是:

这种通信方式本身没有保护机制。

既然不安全,为什么我还要用HTTP来发布我的测速文件?

原因很简单:

IP 地址很难使用 HTTPS。

HTTPS 依赖证书体系。 服务器必须提供一个 SSL Certificate。

证书里面会写明:

这个证书属于哪个域名

例如:

example.com
www.example.com

浏览器会检查:

  • 用户访问的域名
  • 是否和证书一致

问题在于:

IP 地址没有“所有权验证”。

证书机构通常通过验证:

  • DNS 记录
  • 域名控制权

来确认申请人确实拥有这个域名。

但 IP 地址没有这种机制,所以大多数证书机构都不会给 IP 发证书。

此外,现代 HTTPS 还依赖一个技术:

Server Name Indication(SNI)

它的作用是:在连接建立时告诉服务器要访问哪个域名。

这样一个 IP 可以托管多个网站。

但如果访问的是:

https
:
//1.2.3.4

就没有域名信息,服务器也无法判断使用哪个证书。

因此很多测速节点为了简单,直接提供:

http
:
//IP/100M.bin

因为测速文件通常:

  • 不涉及隐私
  • 不需要登录
  • 只是公开下载

所以使用 HTTP 反而最简单。

浏览器虽然会提示 “不安全”,但对测速来说基本没有影响。