文章目录
  1. 关于 HTTPS
    1. HTTP
    2. 对称加密和非对称加密
    3. SSL/TLS
    4. HTTPS
  2. 启用 HTTPS
    1. 准备工作
    2. 开启 HTTPS
  3. 启用 HSTS
    1. HTTPS 降级攻击
    2. 劫持 HTTPS 通信
    3. HSTS 简介
    4. HSTS 用途
    5. HSTS Preload List
  4. 关于本站

HTTP over SSL

关于 HTTPS

HTTP

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,所有的 WWW 文件都必须遵守这个标准,设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。简单点说,HTTP 就是一个网络协议,是专门用来帮妳传输 Web 内容的。

对称加密和非对称加密

对称加密技术:加密和解密使用相同的密钥。比如使用 WinRAR 创建一个带密码的压缩包,下次要把这个解压的时候,需要输入同样的密码。

非对称加密技术:加密和解密使用不同的密钥。比如使用密匙登陆 Linux 的之前,就得生成一对密钥,公钥(public key)和私钥(private key),私钥自己留着,公钥放到 Linux 主机内。使用这对密钥中的一个进行加密,而解密则需要另一个密钥。

SSL/TLS

SSL 是“Secure Sockets Layer”的缩写,中文叫安全套接层,它是在上世纪90年代中期,由网景公司(Netscape)设计的。

互联网上使用的 HTTP 协议是明文的,存在很多缺点——比如传输内容会被偷窥(嗅探)和篡改,发明SSL协议,就是为了解决这些问题。

1999 年,SSL 因为应用广泛,已经成为互联网上的事实标准,IETF 就在那年把 SSL 标准化,标准化之后的名称改为 TLS(Transport Layer Security),中文叫做“传输层安全协议”。

HTTPS

通常所说的 HTTPS 协议,就是 HTTP 和 SSL/TLS 的组合。

HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer),即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。

它是一个 URI scheme(抽象标识符体系),句法类同 http: 体系,用于安全的 HTTP 数据传输。

启用 HTTPS

准备工作

  • 一个有控制权的域名

因为颁发证书的时候,需要验证域名所有权,邮箱或者 CNAME 记录等。

  • 网站空间

其实就是一个 VPS 或者一些类似于机箱这样支持 HTTPS 的空间,Gitlab Pages 也支持,Github Pages 不支持自定义域名的 HTTPS。

  • 证书

现阶段有很多免费的证书了,不过付费的体验更加好。

免费证书: Let’s Encrypt,StartSSL
付费证书: COMODO,DigiCert,Symantec

  • Mixed Content

HTTPS 网页中加载的 HTTP 资源被称之为 Mixed Content(混合内容),因此要避免这种情况的出现。把网站的 HTTP 资源链接都改成 HTTPS。

开启 HTTPS

如果是 VPS 的话,就需要先安装 OpenSSL 了,只是空间的话,就可以在面板上直接添加证书了。

启用 HSTS

HTTPS 降级攻击

HTTPS 通信过程

  • 客户端浏览器使用 HTTP 连接到端口80
  • 侍候器试用 HTTP 302 复位向到 HTTPS
  • 客户端连接到端口 443 的网站
  • 侍候器向客户端提供包含其电子签名的证书
  • 客户端获取该证书,并根据信任证书颁发机构列表来验证该证书
  • 加密通信建立

劫持 HTTPS 通信

攻击从 HTTP 到 HTTPS 的这个网桥,SSL连接还未发生时的中间人攻击。

  • 客户端与 Web侍候器间的流量被拦截
  • 当遇到 HTTPS url 时,使用 HTTP 链接替换它
  • 攻击机模拟客户端向侍候器提供证书
  • 从安全网站收到流量提供给客户端

这时候侍候器认为其仍然在接收 SSL 流量,侍候器无法辨别任何改变。用户可以感觉到是,浏览器中不会标记 HTTPS。

HSTS 简介

HSTS(HTTP Strict Transport Security)国际互联网工程组织 IETE 正在推行一种新的Web安全协议。

HSTS 用途

强制客户端使用HTTPS与侍候器创建连接,能够更有效的保护网站和用户的数据安全。

HSTS Preload List

对于 HSTS 生效前的首次 HTTP 请求,依然无法避免被劫持。目前有两个方案可以解决,一个是将 HSTS 信息加入到域名系统记录中。但这需要保证 DNS 的安全性,也就是需要部署域名系统安全扩展。至今这一方案都没有大规模部署,国内就更不用说了。

另一个就是 HSTS Preload List:内置一份可以定期更新的列表,对于列表中的域名,即使用户之前没有访问过,也会使用 HTTPS 协议。目前这个 Preload List 由 Google Chrome 维护,Chrome、Firefox、Safari 和 Microsoft Edge 都在使用。

想把自己的域名加进这个列表,进入 https://hstspreload.appspot.com/ 看看吧。

关于本站

因为 Github Pages 还未支持自定义域名启用 HTTPS,所以并没有启用 HTTPS 更不用说 HSTS 了。

而且因为本站的 Robots.txt 屏蔽了多数国内搜索引擎的 Spider,虽然它们不一定会准守,但博客是繁体写作的,多数国人看不懂繁体。

如果访问本站出现问题了,就直接去 Github 里面看吧,Github 是启用了 HSTS 的。

2017.02.28 更新