HTTPS(ssl)究竟是如何工作的

时间:2011-06-05 09:15:06

标签: ssl https

我一直在阅读HTTPS,试图找出它的确切运作方式。对我而言似乎没有意义,例如,我正在读这个

https://ssl.trustwave.com/support/support-how-ssl-works.php

注意它在页面中说明了这一点

  

第4步:xyz.com接下来会创建一个   唯一的哈希并使用它们加密它   客户的公钥和   xyz.com的私钥,发送给你   回到客户端。

     

步骤5:客户的浏览器将解密散列。这个过程表明   xyz.com发送哈希和   只有客户能够阅读它。

我不明白的是,黑客不能只是拦截它发送回“客户浏览器”的公钥,并且能够解密客户可以做的任何事情吗?

感谢您的回复

6 个答案:

答案 0 :(得分:86)

为什么需要HTTPS?

验证网站是否经过身份验证/认证(未经认证的网站可以做恶事)。经过身份验证的网站具有从 CA 之一购买的唯一个人证书。

CA是谁(证书颁发机构)?

CA是全球值得信赖的公司,如GoDaddy,GeoTrust,VeriSign等,为网站提供数字证书。

什么是公钥和私钥?

密钥只是用于加密/解密数据的长随机数 公钥是可以与他人共享的密钥。私钥应保密。

假设Jerry生成私钥和公钥。他制作了许多公钥副本并与他人分享 现在,其他人只能使用公钥加密数据,并且该数据只能通过Jerry的私钥解密。
另一种方法是使用公钥仅解密数据,私钥仅加密数据。

公司如何获得证书?

网站所有者首先生成公钥和私钥,保密私钥。 他向CA提供证书签名请求文件(CSR)和他的公钥。 然后,CA根据CSR创建个人证书,包括域名,所有者名称,到期日期,序列号。等等,并在证书中添加加密文本(= 数字签名),最后使用服务器的公钥加密整个证书,并将其发送回网站所有者。
然后使用网站所有者的私钥解密该证书,最后,他将其安装在网站上。

  

注意:加密文字是CA的数字签名。那   文本由CA的私钥加密只能是   由CA的公钥解密   当您安装操作时   系统或浏览器,来自许多可信CA的 root-certificates   GeoTrust,VeriSign,GoDaddy等都有它。这些根证书   包含该CA提供商的公钥,有助于解密   签名。

HTTPS安全性可以分为两部分(握手):

1。验证网站证书:

enter image description here

1)当您输入网址www.Google.com时,Google的服务器会将其公钥和证书(由GeoTrust签名)提供给浏览器。

2)现在浏览器必须验证证书的真实性,即它实际上是否从GeoTrust签名。 当浏览器附带来自所有主要CA的预先安装的公钥列表时,它会选择GeoTrust的公钥并尝试解密由GeoTrust的私钥加密的证书的数字签名。

3)如果它能够解密签名(这意味着它是一个值得信赖的网站),那么它将进入下一步,否则它将停止并在URL之前显示红叉。

2。要创建安全连接(加密传出和传入数据),以便其他人无法读取它:

enter image description here

1)正如我所提到的,Google会在您输入www.Google.com时发送其公钥。使用此公钥加密的任何数据只能由Google的私钥解密,Google不会与任何人共享。

2)验证证书后,浏览器会创建一个新密钥,让我们将其称为会话密钥并制作2份副本。这些密钥可以加密以及解密数据

3)然后,浏览器使用Google的公钥加密(会话密钥的一个副本+其他请求数据)。然后它将其发送回Google服务器。

4)Google的服务器使用其私钥解密加密数据,并获取会话密钥和其他请求数据。

  

现在,请注意,服务器和浏览器都有相同的会话副本   浏览器的关键。因此,没有其他人拥有此密钥,只有服务器   和浏览器可以加密和解密数据。这把钥匙现在是   用于解密和加密数据。

5)当Google将请求的HTML文档和其他HTTP数据等数据发送到浏览器时,它首先使用此会话密钥加密数据,浏览器使用会话密钥的另一个副本解密数据。

6)同样,当浏览器将数据发送到Google服务器时,它会使用服务器在另一方解密的会话密钥对其进行加密。

  

注意:此会话密钥仅用于该会话。如果是用户   关闭网站并再次打开,新的会话密钥将是   创建

答案 1 :(得分:23)

  

我不明白的是,黑客不能只是拦截它发送回“客户浏览器”的公钥,并且能够解密客户可以做的任何事情。

首先,要了解HTTP通信通常有两个步骤。

1)生成一个共享对称密钥,只能在客户端和服务器之间知道,没有人知道它

2)使用此共享对称密钥,客户端和服务器能够安全地相互通信,而不必担心其他人拦截和解密信息。

所以问题变成了,客户端和服务器如何生成一个秘密共享密钥而不被其他人在这个开放的互联网中知道?这是非对称算法即将发挥,演示流程如下:

- 客户端从服务器接收公钥。

- 客户端生成一个密钥字符串“ DummySharedKey ”,稍后将其用作共享密钥,并将其加密为“ 7 $& ^^%#### LDD! !@ “使用服务器的公钥,中间人可能有公钥并可能拦截加密数据,但数据对他来说没用,因为数据只能由服务器解密私钥。

- 服务器收到加密的密钥字符串“ 7 $& ^^%#### LDD !! @ ”,并将其解密为“ DummySharedKey ”使用其私钥

以上密钥交换步骤确保只有客户端和服务器才能知道共享密钥是“ DummySharedKey ”,没有其他人知道它。

因此,了解客户有责任生成共享密钥,而不是服务器,这一点至关重要! (我认为这让你很困惑)

我还建议你看看这个非常好解释HTTP的视频。 https://www.youtube.com/watch?v=JCvPnwpWVUQ&list=FLt15cp4Q09BpKVUryBOg2hQ&index=3

答案 2 :(得分:21)

  

我不明白的是,黑客不能只是拦截它发送回“客户浏览器”的公钥,并且能够解密客户可以做的任何事情。

公钥/私钥加密基于使用素数的模数算法。

这种非对称加密仅在20世纪70年代中期被发现。它归功于Diffie and HellmanRivest, Shamir and Adleman。 (尽管,英国的秘密机构实际上都重新发现了already known。)

Diffie-Hellman上的维基百科页面有一个通过公共频道进行密钥交换的详细示例。虽然它本身并不描述SSL,但要理解为什么知道公钥不会泄露消息的内容应该很方便。

您可能还会发现此simple RSA example很有趣。

答案 3 :(得分:1)

我在服务器/客户端之间写了一篇关于SSL握手的小博客文章。请随便看看。

SSL Handshake

同样的小片段如下:

“客户端通过HTTPS向服务器发出请求。服务器发送其SSL证书+公钥的副本。在使用本地可信CA存储验证服务器的身份后,客户端生成秘密会话密钥,使用服务器的公钥并发送它。服务器使用其私钥解密秘密会话密钥,并向客户端发送确认。建立安全通道。“

它还描述了对称/非对称加密,一旦建立安全传输,就会用于SSL证书和数据传输。

答案 4 :(得分:1)

我正在研究相关主题,并阅读了how-https-workshow-does-https-work-rsa-encryption-explained/之类的几个博客。

我已根据研究总结了序列图,希望对参与此线程的人有所帮助。

enter image description here

有关更多详细信息,您可以检查提到的博客。

答案 5 :(得分:-1)

有关SSL的详细说明,请参阅https://www.ietf.org/rfc/rfc2246.txt

以下是SSL的简要介绍,以回答您的问题:

1)使用证书进行身份验证。服务器证书是必须的,客户端证书是可选(仅在服务器请求时)。证书就像是证明你是谁以及它还包含非对称加密的公钥。

2)使用非对称加密(使用服务器证书中的公钥)建立共享对称密钥,用于通过对称加密安全地在客户端和服务器之间传输数据(出于性能原因,因为对称加密比非对称加密快。)

共享对称密钥是通过从客户端(用服务器公钥加密)交换预主密钥来建立的,并且是从客户端随机和服务器随机的预主密钥导出的(感谢@EJP将其指向评语):

master_secret = PRF(pre_master_secret, "master secret",
                           ClientHello.random + ServerHello.random)

我们需要服务器随机和客户端随机,以防止攻击者可以捕获前一个会话并重播新会话的重放攻击。

  

我不明白的是,黑客不能只是拦截了   公钥发送回“客户的浏览器”,并能够   解密客户可以做的任何事情。

黑客无法解密消息,因为他不知道服务器私钥。请注意,公钥不能用于解密邮件。