Linux 安全系列教科书之 HTTPS 是如何工作的?- 初学者指南

证书颁发机构是互联网安全的最重要的基础之一。在没有人可以被信任时,证书颁发机构是首先被所有人所信任的人。之后,此证书颁发机构 (又名 CA) 的任务是确保服务器和客户端通过互联网建立通信之前先建立它们之间的信任。CA 的重要性不仅体现在浏览器和 web app 所使用的 HTTPS,还包括加密邮件、带签名的软件更新、VPN 以及众多其他领域。我们将以 HTTPS 例子为原型,在这一特定的上下文中学习 CA。

HTTP 纯文本传输的问题

因特网的通信并非可以信任的。当你向 HTTP 站点 http://www.example.com 收发信息时,你的包在传输过程中会发生很多事情。

  1. 某个坏家伙能够拦截到你的通信,在重新发送之前对数据进行窃取。在通信的双方都不知情的情况下信息就泄露了。我们需要保证通信是私有的。
  2. 某个坏家伙能够对通道中传输的信息进行修改。Bob 可能发送了一个 “x” 而 Alice 收到的却是 “y”,这是因为某个坏家伙拦截了该条消息并修改了它。换句话讲,消息的完整性被破坏了。
  3. 最后,也是最重要的一点,我们得确认我们正在通信的对方确实是他自己所说的那个人。再回到 example.com,我们如何保证回复我们的服务器确实是 www.example.com 的合法持有人?在网络上的任何一点,你都有可能会被错误地导向另外一台服务器。而 DNS 则是负责转换域名的一个所在,比如将 www.example.com 转换为公网上的一个 ip 地址。但你的浏览器是无法对 DNS 转换后的 ip 地址进行校验的。
    前两个问题,都可以通过在通过因特网给服务器发送之前对消息进行加密的办法解决。也就是说,切换到 HTTPS 即可。而最后一个关于身份的问题则需要证书办法机构发挥作用了。

开始加密的 HTTP 会话

对于不安全的通道进行加密通信的最主要的问题是 “怎么开始?”。
第一步是让浏览器和服务器双方在不安全的通道上交换加密密钥。如果你不了解密钥这一术语的话,你可以把它们想象成一个很长的随机生成的密码,在通过不安全的通道发送消息之前用它对你的数据进行加密。
好了,如果密钥是通过不安全的通道发送的,那么将来任何人都可以监听并威胁到 HTTPS 会话的安全性。此外,我们如何才能相信自称是 www.example.com 的服务器发送的密钥确实是该域名的持有者?我们可能在跟一个伪装成合法站点的恶意站点进行加密通信,我们并不知道两者之间有啥区别。
所以,如果我们希望确保密钥交互的安全性,那么确认身份的问题就非常重要了。

证书颁发机构

你可能听说过 LetsEncrypt、Digicert、Comodo 以及其他一些为你的域名提供 TLS 证书的服务商。你可以根据自己的需要选择合适的服务商。现在,持有域名的个人/组织必须以某种方式向证书颁发机构证明他们确实是该域名的持有者。根据证书颁发机构的要求,你可以创建一个包含一个唯一值的 DNS 记录;也可以添加一个文件到你的 web 服务器,内容由证书颁发机构指定,然后 CA 可以读取此文件并确认你是该域名的有效所有者。
之后你向 CA 购买一个 TLS 证书,最终产生一个私钥和一个颁发给你的域名的公钥。然后由你的私钥所加密的消息可以由公共证书解密,反之亦然。这就是所谓的非对称加密。
客户端浏览器,比如火狐和谷歌 (有时甚至是操作系统) 都具备证书颁发机构的相关信息。这些信息从一开始 (也就是说在它们安装的时候) 就被输入到浏览器/设备中,因此它们知道它们可以信任哪些 CA。好了,现在当浏览器尝试通过 HTTPS 连接到 www.example.com 时,看到了一个由 Digicert 颁发的证书,浏览器可以使用本地存储的密钥来对其进行验证。实际上中间还有很多步骤,限于篇幅本文不做详细说明。
既然由 www.example.com 提供的证书是可以被信任的,那么可以用它来生成一个唯一的对称加密密钥用于之后的客户端和服务器之间的会话。在对称加密中,一个密钥同时用于加密和解密,通常要比非对称的方式快的多。
如果你对 TLS 和因特网安全感兴趣的话,你可以通过深入了解 LetsEncrypt 及其免费的 TLS CA 来进一步了解这一主题。整个操作步骤比上文中提到的要详细的多。
其他我可以推荐你进一步学习的资源是 Troy Hunt 的博客,以及像 HTTPS Everywhere 和 Certbot 等之类的 EFF 所做的工作。所有的这些资源都是免费的,而且实施起来也非常便宜 (你只需要支付域名注册费和每小时的 VPS 费用) 就可以获得实践经验。
原文链接:How HTTPS Works? — Beginner’s Guide
作者简介
Ranvir Singh
Ranvir Singh
Ranvir Singh 是一名兴趣广泛的技术类文章撰写人。他是一个 Unix 粉丝。涉猎领域包括系统管理、计算机硬件和物理学。

posted @ 2019-02-01 11:02  Defonds  阅读(23)  评论(0编辑  收藏  举报