(译)HTTPS的工作原理

Author Avatar
XibHe 4月 27, 2017
  • 在其它设备中阅读本文章

HTTPS只是标准HTTP协议涂上一层美味的SSL/TLS加密信息。 除非出现严重错误,它可以防止人们因infamous Eve查看或修改那些构成你浏览中产生的请求;让你可以安全的在你的电脑和服务器之间发送密码、通信和信用卡信息等数据。当绿色小挂锁和字母“https”出在你的地址栏时,并不意味你所访问的网站仍是之前的,而不是已经被篡改过的,当你打开网页时这些标识至少帮助你安全地访问网页。

1.什么是HTTPS以及它做了什么?

HTTPS是著名的HTTP协议,是在SSL / TLS(以下简称为“SSL”)加密层之上。服务器和客户端仍然通过完全相同的HTTP协议进行通信,但二者的通信是建立在一个安全的SSL连接,加密和解密请求和响应体系之上的。SSL有两个主要目的:

  • 验证你所访问的服务器的正确性
  • 确保你与服务器之间的数据通信,无论是你发送给服务器的还是服务器返回给你的信息不被篡改

真正非常聪明的部分是任何人都可以拦截您与服务器交换的每一个消息,包括您同意使用密钥和加密策略的消息,仍然无法读取任何实际发送的数据。

2.如何建立SSL连接

通过握手建立客户端和服务器之间的SSL连接,其目的是:

  • 为了确实与客户端通信服务器的正确性
  • 双方已经同意一个“密码套件”,其中包括二者将用于交换数据的加密算法
  • 双方已就此算法达成任何必要的密钥

一旦连接建立,双方可以使用约定的算法和密钥来安全地发送消息给彼此。我们将把握手分为3个主要阶段 - 发送Client Hello报文,证书交换和密钥交换。

1.客户端发送Client Hello报文 — 握手开始于客户端发送Client Hello报文。这包含服务器通过SSL连接到客户端所需的所有信息,包括各种密码套件及其支持的最大SSL版本。服务器使用Server Hello报文进行响应,报文中包含客户端所需的类似信息,包括根据客户端的偏好决定将使用哪个加密套件和SSL版本。

2.证书交换 — 现在连接已经建立起来了,服务器必须向客户端证明其身份。这是使用SSL证书来实现的,这是一个很小的类似于护照的东西。SSL证书包含各种数据,包括所有者的名称,附加的属性(例如域),证书的公钥,数字签名和有关证书有效期的信息。客户端检查隐式信任该证书,或者它被隐式信任的几个证书颁发机构(CA)之一被验证和信任。更多关于证书的要求。注意服务器还可以要求通过证书证明客户端的身份,但这通常只发生在非常敏感的应用程序中。

3.密钥交换 — 客户端和服务器交换的实际消息数据的加密将使用一种对称算法来完成,该算法在发送Client Hello报文阶段已被认可。对称算法使用单个密钥进行加密和解密,与需要公钥/私钥对的不对称算法相反。双方需要就此单一的对称密钥达成一致,即使用非对称加密和服务器的公钥/私钥可以安全地实现这一过程。

客户端生成用于主对称算法的随机密钥。它使用在发送Client Hello报文阶段中同意的算法和服务器的公钥(在其SSL证书上找到)对其进行加密。它将此加密密钥发送到服务器,使用服务器的私钥对其进行解密,握手会话中有趣部分就这样完成了。双方都充满乐意,如同他们正在和正确的人交谈,并且秘密地同意对对方加密他们即将发送的数据的密钥。HTTP请求和响应现在可以通过对明文消息进行加密后发送。

3.证书

3.1信任

在最基本的层次上,SSL证书只是一个文本文件,任何具有文本编辑器的人都可以创建一个。实际上,您可以创建一个证书,声称您是Google Inc.,并且你掌握域名gmail.com。如果这是事实,SSL就是一个笑话;身份验证基本上是客户端询问服务器“你是Google吗?”,服务器回复“呃,是的,这是一张纸,’我是Google’写的”,客户说“好,这是我所有的数据”。阻止这场闹剧的魔法是在数字签名中,允许一方验证另一方的纸张是否合法。
为什么你可能信任证书有两个明智的原因:

  • 如果它在你隐含信任证书的列表上
  • 如果能够证明它是被上述列表中的一个证书的控制器所信任

第一个标准很容易检查。您的浏览器具有可从其中查看,添加和删除证书颁发机构(CA)可信SSL证书预先安装的列表。这些证书由一个集中的(在理论上,一般在实践中)组织来控制,这些组织非常安全,可靠和值得信赖,如Symantec,Comodo和GoDaddy。如果服务器从该列表中提供证书,那么您可以信任它。

第二个标准很难。服务器很容易说:“er,我的名字是er,来自微软,你信任Symantec和er,他们完全相信我,所以很酷。”一个有点聪明的客户端可能会去问Symantec“我有一个来自微软的服务请求,说你相信他们,这是真的吗?”但即使Symantec说“是的,我们知道他们,微软是合法的”,您仍然不知道声称是Microsoft的服务器实际上真的是微软还是某些入侵者。这时候数字签名该登场了。

3.2数字签名

如前所述,SSL证书具有关联的公钥/私钥对。公钥作为证书的一部分分发,私钥被保密。这对非对称密钥用于SSL握手,以交换另一个密钥,供双方对数据加密和解密。客户端使用服务器的公钥加密对称密钥,并将其安全地发送到服务器,服务器使用其私钥对其进行解密。任何人都可以使用公钥加密,但只有服务器可以使用私钥进行解密。

数字签名的情况恰恰相反。证书可以由另一个机构“签署”,从而有效地记录在案,“我们已经证实该证书的控制人也控制证书上列出的属性(域名)”。在这种情况下,权限使用其私钥(广义地说)加密证书的内容,并且该密文作为数字签名附加到证书中。任何人都拥有权限使用公钥对该签名进行解密,并验证其是否为预期的解密值。但只有证书的所有者才能使用私钥加密内容,所以只有所有者才能实际创建一个有效的签名。

因此,如果服务器声称拥有由Symantec(或其他CA)签署的Microsoft.com的证书,那么您的浏览器不需要为此签名。如果是合法的,Symantec将使用(超秘密)私钥来生成服务器的SSL证书的数字签名,因此您的浏览器使用可以使用(超公共)公钥来检查该签名是否有效。Symantec将采取措施确保他们正在签署的组织真正拥有Microsoft.com,因此,鉴于您的客户信任Symantec,可以确定它真的在与微软公司对话。

3.3自签名

请注意,所有根CA证书都是“自签名”,这意味着使用自己的私钥生成数字签名的证书。根CA证书没有什么特别之处 — 你可以生成自己的自签名证书,并使用它来签署其他证书。 但是,由于您的随机证书不会作为CA预先加载到任何浏览器的任何地方,所以他们都不会相信你所签署的自己的或他人的证书。你是有效地说“呃,我真的是微软,这里是我自己签发并签署的身份证件”,所有正常运行的浏览器都会弹出一个非常严重的错误信息,以回应你的诡计。

这给所有浏览器和操作系统发行商带来了巨大的负担,只能信任干净的根CAs,因为他们的用户最终信任vet网站并保持证书安全的组织。这不是一件容易的事

3.4你相信什么?

有趣的是,你的客户在技术上并不试图验证是否应该信任发送证书的一方,而是应该信任证书中包含的公开密钥。SSL证书是完全公开和公共的,因此任何攻击者都可以获取Microsoft的证书,拦截客户端对Microsoft.com的请求,并向其提供合法的证书。客户端会接受这一点,并开始愉快地握手。 但是,当客户端加密将用于实际数据加密的密钥时,它将使用该真实证书中的真实的Microsoft公钥进行此操作。由于攻击者没有Microsoft私钥来解密,所以他们现在被终止了。即使握手完成,它们仍然无法解密密钥,因此无法解密客户端向其发送的任何数据。只要攻击者不控制受信任的证书的私钥,正常的秩序就会顺利进行下去。如果客户骗取了受信任的证书,攻击者控制了证书和公钥,那么麻烦就开始了。

4.真的很有趣的事实

4.1咖啡店可以通过网络监控我的HTTPS流量吗?

不。公钥密码使用方法的魔力意味着攻击者可以观察客户端和服务器之间交换的每一个字节数据,并且仍然不知道你们之间所说的话大致等于多少交换的数据量。然而,你的正常HTTP流量在不安全的Wi-Fi网络上仍然非常脆弱,而且脆弱的网站可能会成为任何数量的解决方案的受害者,这些方法可能会欺骗您通过纯HTTP或在完全错误的地方发送HTTPS流量。例如,即使登录表单通过HTTPS提交用户名/密码组合,如果表单本身通过HTTP安全地加载,那么攻击者可能会在到达您的计算机的途中拦截表单的HTML,在修改后将登录详细信息发送到他们自己的服务器。

4.2我的公司可以通过网络监控我的HTTPS流量吗?

如果使用由自己公司控制的机器,那么是可以监控的。请记住,在每个信任链的根源都是一个隐含信任的CA,并且这些权限的列表存储在您的浏览器中。您的公司可以使用他们的机器访问权限,将自己的自签名证书添加到这个CA列表中。然后他们可以拦截您的所有HTTPS请求,提供声称代表相应网站的证书,由他们的假CA签名,因此毫无疑问,您的浏览器信任这些CA签名。由于使用其狡猾的证书的公钥对所有HTTPS请求进行加密,所以可以使用相应的私钥来解密和检查(甚至修改)您的请求,然后将其发送到其预期位置。他们可能不会这样做。但他们可以。
顺便提一句,这也是你如何使用代理来检查和修改iPhone应用程序所提供的其他无法访问的HTTPS请求。

4.3那么Lavabit和联邦调查局怎么了?

Lavabit是2013年NSA泄漏疯狂期间爱德华·斯诺登(Edward Snowden)的超级安全的电子邮件提供商。正如我们所看到的,无数标准黑客可以允许联邦调查局看到Lavabit和其客户之间的任何数据。没有Lavabit SSL证书的私人密钥,黑客们是不可能监听到这些数据的。然而,一位有益的美国法官告诉Lavaff创始人Ladar Levison,他不得不交出这个钥匙,有效地让联邦调查局自由地监视核心的内容。Levison通过在4点类型的11个硬拷贝页面上交出2,560个字符的键,试图停下来,但是被要求执行一个命令,必须以有用的格式交出私钥,否则将会面对每天5000美元的罚款。
一旦他遵守了这个命令,Lavad的CA证书颁发机构GoDaddy就会认为证书被破坏了,就撤销了证书。这将Lavabit证书添加到证书吊销列表(CRL)中,该证书撤销列表(CRL)是客户端不再信任以提供安全连接的可信证书的列表。妥协的结果,自签名或其他不可信任的证书导致浏览器显示一个大的红色错误消息,并且阻止或彻底禁止用户进一步的操作。不幸的是,浏览器将继续信任破坏的证书,直到它们将最新的更新提交给CRL,这个过程在实践中显然是不完美的

5.结论

HTTPS不是不可破解的,SSL协议必须不断发展,因为对其的新攻击一直在快速的发展演化。但是,如果看不到您的消息,那么传输秘密数据的方式仍然是令人印象深刻的方式。当然,这里没有提及许多实现细节,例如握手消息的确切格式和顺序,缩短的握手来接收最近的会话而不必重新协商密钥和密码套件,以及每个阶段可用的许多不同的加密选项。要记住的关键是,尽管HTTPS将数据安全地保护到目的地,但绝对不会对您(作为用户或开发人员),保护您免受XSS或数据库泄漏或任何其他事情造成的严重影响。时刻保持警惕。 在威尔·史密斯的不朽言辞中,“在黑暗中行走,要时刻注意,防止突发的暴力。”。
如果你喜欢这片文章,你可能会喜欢我的另一篇文章解释SSL2015年FREAK漏洞的细节

原文地址

How does HTTPS actually work?

参考资料

《图解HTTP》

–EOF–

若无特别说明,本站文章均为原创,转载请保留链接,谢谢