摘要:本文试图一步步还原HTTPS的设计过程,来理解HTTPS为何会变成现在这样。然而,这并不代表HTTPS的实际设计过程。阅读完本文并抛开您之前对HTTPS 的理解,“恢复”过程将变得更加容易。
首先,我们先不讨论HTTP 或HTTPS。首先,我想让A 向B 发送hello 消息。
在实现这个聊天软件时,本文只会考虑安全问题。
A 向B 发送的hello 消息包在不知道消息内容的情况下无法被中介拦截。
如何才能实现真正的安全?
对于这个问题,很多人立刻想到对称加密、非对称加密、DES、RSA、XX、破解加密等各种加密算法。
尽管我想说加密算法只是一种解决方案,但您要做的第一件事就是了解问题领域。 —— 什么是安全?
我个人的理解是:
A和B之间通信的内容。只有A和B才能看到通信的实际内容。
OK,问题域定义完毕(当然,实际上有多个定义)。一个简单的解决方案可能是对消息进行加密。
这是题外话,但这是唯一的方法吗?也许未来会出现一种材料,能够突破目前世界上的通讯假设,实现真正意义上的保密。
对于像A 和B 这样的简单通信模型,选择很容易。
这是一种对称密码算法,图中的密钥S同时起到加密和解密的作用。具体细节超出了本文的范围。
只要这个密钥S不被泄露给第三方并且密钥S足够安全,我们首先提出的问题领域就已经得到解决。因为A和B是世界上仅有的两个人知道如何加密和解密他们之间的消息。
然而,在WWW环境中,Web服务器通信模型就不那么简单了。
如果服务器对所有客户端通信使用相同的对称加密算法,则与不加密相同。那么我们应该做什么呢?能否在不暴露密钥的情况下使用对称加密算法?请读者思考21秒。
答案是网络服务器为每个客户端使用不同的对称加密算法。
如何确定对称加密算法
等等,又一个问题来了。服务器如何告诉客户端使用哪种对称加密算法?
当然这取决于谈判。
但是,协商过程未加密,可能被中介拦截。然后可以对协商过程进行对称加密。如果协商过程是否加密怎么办?也许再次加密会更好……好吧,这是一个先有鸡还是先有蛋的问题。
如何对协商过程进行加密
现在出现了一个新问题:如何对协商过程进行加密。在密码学领域,有一种称为“非对称密码学”的密码算法,其具有用私钥加密的密文可以用公钥解密,而用公钥加密的密文无法解密的特点。无法完成。它将用您的私钥解密。只有一个人拥有私钥,但公钥可以发送给所有人。
服务器到A、B. 的方向尚不安全,但至少到服务器的A 和B 方向是安全的。
好了,加密算法如何协商的问题就解决了。使用非对称加密算法进行对称加密算法的协商过程。
现在,你明白为什么HTTPS需要对称和非对称加密算法了吗?
协商哪种加密算法
如果您的Web 服务器为每个客户端使用不同的对称加密算法,同时您无法告诉第三方对称加密算法是什么,该怎么办?
最终导致分包给持有相同第三方组织证书的其他中介机构。
数字签名解决同一组织颁发的不同证书被篡改的问题
要解决这个问题,首先要想清楚同一组织内不同证书职责的确定问题。
只能放在客户端。这意味着客户端获得证书后,可以判断证书是否被篡改。我们怎样才能获得这种能力呢?
我们在现实中寻找灵感。例如,如果您是人力资源专业人员,则证书包含诸如谁拥有该证书、谁颁发该证书以及颁发时间等信息。同时,最重要的,证书编号,也会写在证书上。如何验证此证书的真伪?请携带证书编号到相关机构进行验证。如果证书持有者与实际考生相符且证书编号也相符,则证明该证书是真品。
我们的客户可以采用这样的机制吗?
但是这个“第三方”在哪里呢?不可能的?对于远程服务来说,整个交互速度比较慢。因此,该第三方组织的验证功能只能位于客户端本地。
客户端如何在本地验证证书?
客户端如何在本地验证证书?答案是因为证书本身已经告诉客户端如何验证证书的真实性。
换句话说,证书描述了如何根据证书的内容生成证书编号。客户端获得证书后,根据证书方法生成证书编号。如果生成的证书编号与该证书的证书编号相同,则该证书是真实的。
同时采用第三方私钥进行加密,避免证书号码本身外包。
这个有点抽象,我们用一张图来帮助理解。
将创建证书,如图所示。证书的编号生成方法MD5告诉客户端可以通过使用MD5评估证书的内容来获得证书编号。
客户端获取证书后,开始验证证书内容。如果客户端计算出的证书编号与证书中的证书编号相同,则验证成功。
但是第三方组织的公钥是如何到达客户端计算机的呢?那里有很多机器。
事实上,浏览器和操作系统实际上维护着一个权威第三方组织的列表(包括他们的公钥)。客户端收到的证书中写有颁发机构,因此客户端根据颁发机构值在本地查找对应的公钥。
旁注:一旦浏览器和操作系统的防线被突破,您将无能为力。想起当时安装的非传统XP系统我就感到害怕。
至此,您应该已经了解了,证书是HTTPS数字证书,证书编号是数字签名,第三方机构是数字证书颁发机构(CA)。
CA如何向服务器颁发数字证书?
当我听到这个问题时,我误以为我们的服务器需要向CA部门的服务器发出网络请求来获取这个证书。 是我理解有问题还是.
其实问题是CA如何向网站管理员颁发数字证书,管理员又如何将这个数字证书放到服务器上呢?
我如何申请CA?所有CA 组织都是相似的。我在网上找到的。
获得 证书后,您可以在自己的服务器上配置它。那么具体要如何配置呢?我们将把它留给谷歌。
你可能需要整理一下你的想法
尝试通过推理还原HTTPS设计流程。这样你就可以了解为什么HTTPS比HTTP有更多的交互,为什么HTTPS性能差,并找到HTTPS的性能优化点。
上述大部分工作都是关于允许客户端和服务器安全地协商对称加密算法。这主要是HTTPS 中SSL/TLS 协议的作用。剩下的就是双方在通信过程中使用这种对称加密算法进行加密和解密。
下面是HTTPS协议的实际交互图(我从网上复制的,忘了出处了,如有侵权请告知)。
你能用一个词概括一下HTTPS吗?
答案是不。因为HTTPS本身太复杂了。但我还是想用一段话来总结一下HTTPS:
为了保证客户端和服务器之间通信过程的安全,HTTPS需要使用对称加密算法,但是协商对称加密算法的过程中需要使用非对称加密算法来保证安全。直接使用非对称加密本身不存在安全性。由于公钥可能被中间人篡改,因此客户端和服务器不直接使用公钥,而是使用数字证书颁发机构颁发的证书来保证安全。非对称加密过程本身。这样,通过这些机制协商出一个对称加密算法,双方都使用该算法进行加密和解密。这样就解决了客户端和服务器之间的通信安全问题。
好长的一段啊!
后记
以上是个人为了理解HTTPS而自辩的观点。充其量,它可以被认为是一篇关于HTTPS 的一般性科学文章。如果您发现任何错误,请告诉我们。
那么为什么HTTPS这么容易理解呢?我个人的答案是,一旦你给家人做饭,你就会明白你妈妈每天做饭有多难。
版权声明:本文由今日头条转载,如有侵犯您的版权,请联系本站编辑删除。