例如,假设A 希望能够向B 发送消息。
实现以下功能
A 向B 发送的hello 消息包在不知道消息内容的情况下无法被中介拦截。
说到这个问题,很多人立刻想到对称加密、非对称加密等各种加密算法。加密算法只是解决方案。您应该做的第一件事是了解问题——:什么是安全?
理解这个例子:
A和B之间通信的内容。只有A和B才能看到通信的实际内容。
问题很清楚,很容易想到加密消息作为解决方案。
对于像A 和B 这样的简单通信模型,选择很容易。
这是一种对称加密算法,图中的密钥S同时起到加密和解密的作用。只要密钥S 不暴露给第三方并且密钥S 足够安全,就应该没有问题。您首先设置的问题将得到解决。因为世界上只有A和B知道如何加密和解密A和B之间的消息。然而,WWW环境中Web服务器的通信模型并不那么简单。
如果服务器对所有客户端通信使用相同的对称加密算法怎么办?这与不加密一样吗?即使您可以使用对称加密算法而不暴露密钥,Web 服务器仍然会使用与每个客户端不同的加密算法。对称加密算法:
另一个问题出现了。服务器如何告诉客户端使用哪种对称加密算法?当然是通过协商发生的,但是协商过程是未加密的并且被中介拦截。对称或不对称加密协商过程怎么样?使用更多加密不是更好吗?这是一个先有鸡还是先有蛋的问题。
在密码学领域,有一种密码算法叫做“非对称密码学”,用私钥加密的密文可以用公钥解密,而用公钥加密的密文可以解密。无法解密。对于解密来说,只有一个人拥有私钥,但是服务器在A、B……方向上仍然不安全,但至少可以将公钥发送给该方向上的所有人。 A和B到服务器都是安全的。
利用非对称加密算法解决了对称加密算法的协商过程。您是否理解为什么HTTPS 需要对称加密算法和非对称加密算法,因为Web 服务器对每个客户端使用不同的对称加密算法?这种对称加密算法是什么?如果各方知道该怎么做,他们应该使用随机数?生成对称加密算法。您与之交互的内容决定了加密算法。
你知道为什么HTTPS协议的握手阶段有这么多随机数吗? 如何获取公钥细心的人都会知道,如果使用非对称加密算法,客户端A和B可能已经注意到了,你需要保存您的公钥。否则,密码操作将无法进行,并且出现一个新的问题:客户端A和B如何安全地检索公钥?我能想到的唯一解决方案是:
选项1. 服务器将公钥发送给每个客户端。
选项2:服务器将公钥放在远程服务器上,客户端可以请求它。
选择选项1,因为选项2 需要另一个请求,并且还负责公钥放置。如果服务器发送公钥,选项1 就会出现问题。发送给客户端的包被中介阻止。我应该怎么办?
默认情况下在每个客户端的每个浏览器中存储每个网站的公钥显然是不切实际的。解决这个问题的唯一方法是使用第三方组织的公钥。公钥传输出现问题是因为客户端无法判断返回公钥的人是中介还是实际的服务器。这其实就是加密中提到的一个认证问题。如果让你解决这个问题,你会怎么解决?
如果您了解HTTPS,您就会知道解决方案是使用数字证书。但是你有没有想过证书的本质呢?既然服务器要传递公钥给客户端,这个过程本身就不安全,所以你可以直接对过程本身进行重新加密,但是用对称加密是否要使用加密或者非对称加密是一个先有鸡还是先有蛋的问题。
这个问题的难点在于,如果选择将公钥直接传输给客户端,则永远无法解决公钥传输被中介分包的问题。因此,您不能直接传输服务器的公钥。它被发送给客户端,但第三方组织使用它。私钥对公钥进行加密并将其传递给客户端。然后客户端使用第三方组织的公钥进行解密。下图是“数字证书”。证书仅包含服务器传递给第三方组织的公钥。使用第三方组织的私钥加密。
如果可以解密,则说明公钥不是由中间人传递的。因为如果中间人使用自己的私钥加密某些内容并将其传递给客户端,则客户端无法使用第三方的公钥对其进行解密。然而现实中HTTPS也有数字签名的概念,这是不可能的。如果第三方仅为一家公司创建证书,则该证书也可能颁发给恶意公司,例如中介机构,在这种情况下,中介机构可以扣留该证书。中介和证书都可以使用第三方组织的公钥进行解密,因此您不知道自己收到的是哪个证书。
要解决这个问题,首先需要想清楚同一组织内识别不同证书的责任应该放在哪里。客户端只有获得证书后才能够区分。证书已被篡改。怎样才能实现这个能力呢?比如,当你获得一个考生的学历证书时,证书上包含了证书的拥有者、颁发机构、颁发时间等信息。证书具有最重要的证书编号之一。如何验证此证书的真伪?请携带证书编号到相关机构进行验证。如果证书所有者与实际候选人匹配并且证书编号也匹配,则客户端使用此机制来暗示证书是真实的。如果这个“第三方组织”到位了,那就是远程服务。对于远程服务,这种第三方组织验证功能只能在客户端本地进行,因为它会减慢整个交互的速度。
客户端如何在本地验证证书?答案是证书本身已经告诉客户端如何验证证书的真实性,即它不会根据证书的内容来验证证书。生成证书编号。客户端获得证书后,根据证书方法生成证书编号。如果生成的证书编号与该证书的证书编号相同,则同时说明该证书是真实的。为了避免传输证书编号本身,请使用证书的编号生成方法MD5 向客户端指示可以评估证书的内容。使用证书获取证书编号。
客户端获得证书后,开始验证证书的内容。如果客户端计算出的证书编号与证书中的证书编号相同,则验证成功。
但是第三方组织的公钥如何到达客户端的机器呢?客户端收到的证书中写入了颁发机构,并且根据该值,客户端检索相应的公钥,因为您会在本地找到它。说到发证机关,你可能已经知道我上面说的了。证书是HTTPS数字证书,证书编号是数字签名,第三方机构是指数字证书颁发机构(CA)。
CA如何向服务器颁发数字证书?
我如何申请CA?如图所示,每个CA组织都是相似的。
有了证书之后,如何在自己的服务器上进行配置呢?就剩下百度尝试通过计算来还原HTTPS的设计过程了。通过这种方式,您可以了解为什么HTTPS比HTTP有更多的交互,为什么HTTPS性能较差,并了解HTTPS的性能优化点,以便能够找到客户端和服务器安全协商对称加密算法的方法。这是HTTPS 中SSL/TLS 协议的主要作用。剩下的就是双方在通信过程中使用这个对称加密算法进行加密和解密。下面是HTTPS协议的实际交互图。
以下是HTTPS 的一段摘要: 为了保证客户端和服务器之间通信过程的安全,HTTPS需要使用对称加密算法。但协商对称加密算法的过程需要使用非对称加密算法来保证安全。然而,客户端和服务器并不直接使用公钥,因为对称加密过程本身并不安全,而且公钥可能会被中间人篡改。但为了保证非对称加密过程本身的安全,请使用数字证书颁发机构颁发的证书。这样,通过这些机制,协商出对称加密算法,双方使用该算法进行加密和解密,从而解决问题。客户端和服务器之间的通信安全问题。
版权声明:本文由今日头条转载,如有侵犯您的版权,请联系本站编辑删除。