2011-04-06 54 views
3

我对SSL/TLS有一个基本的误解,我希望能够清除它。SSL/TLS的误解

我的理解是,当我得到一个证书为我的网站有我的所有信息,并通过我的证书颁发机构(VeriSign公司,或任何人)签字。当有人从我的网站请求使用SSL/TLS的页面时,证书将发送给用户,并使用证书颁发机构众所周知的公钥对其进行验证。然后用户可以查看证书并查看我的信息。他们确信我是我自己说的那个人,并且自从验证正确运行以来,该消息并未被篡改。

什么是阻止我在浏览器和真正的网站中间放置一个代理服务器,然后发送真实网站的证书(我不知道这是否正确,我想我在这一点上因为我的浏览器把它确认下来),让客户认为它真的是网站whateverdomain.com,当它真的是我的中间?

谢谢。

+0

伟大的问题! – 2011-04-06 19:05:51

回答

2

首先,所有的证书都是公开的,没有加密。然而,它与CA的私钥签署。

当客户端连接到服务器,它们基于某些秘密信息,即服务器的私有密钥(和服务器只发送公证书没有私钥客户端)执行密钥交换。这是步骤1.

步骤2是用于客户端验证给定的证书,并确保其(客户端)已连接到预期位点,即网站已呈现的合法证书。这样的验证是一个复杂的过程(许多参数被检查并且许多步骤被制作)。验证涉及检查服务器证书的签名。

现在关于MITM攻击。一般来说,这是防止MITM攻击的第2步。如果验证不力,攻击者可以尝试伪造证书并歪曲网站。另一个可能的薄弱环节是证书颁发机构没有经过适当验证或由于安全漏洞(最近发生在某些Comodo的子CA)而颁发了证书。

我们有一个很好的(我希望的SSL在corresponding article如何工作:)描述,但它并不能解释MITM攻击。

1

证书只包含SSL连接的公钥。客户端将使用证书中的公钥与服务器进行通信,因此代理服务器将需要保密的相关密钥。

注意,公共/私人密钥对通常用于交换其用于散装通信的对称加密密钥。

+0

饥饿 - 你是说它包含我的证书的公钥或签名机构的公钥?如果是用于我的证书并持有私钥,那么用户如何知道这确实来自CA? – skaz 2011-04-06 19:03:32

+0

它包含您的证书的公钥。浏览器拥有根CA的“硬编码”公钥,而证书由CA用他们的私钥签名。因此,除非您知道CA的私钥或者妥协浏览器,否则您无法伪造证书。另见http://askubuntu.com/questions/30039/warning-about-ssl-ceritificate-am-i-under-attack – Nils 2011-04-06 19:09:35

+0

-1这是误导。服务器不需要私钥来向客户端发送消息 - 他们需要私钥来读取客户端发送的消息。 – 2011-04-06 19:23:02

1

首先,对术语:当有人加密(的散列)与自己的私钥文件,我们不再叫它加密 - 这就是所谓的签署。因此证书颁发机构(CA)使用其私钥签署(散列)文档,因此文档有效性可以由大家使用CA's public key验证。

其次,SSL现在被称为TLS

现在,回答你的问题:一旦你有服务器的公钥,你可以发送消息只有服务器可以读取,因为没有其他人有他们的私钥。所以,如果你加密了一个AES密钥,并且服务器发送回你的消息“Hello world!”使用该密钥加密,可以确定该消息确实来自服务器,因为没有其他人可以读取密钥。

实际的handshake in TLS比这更复杂,但这是基本的想法。

+0

或者更确切地说,TLS已经过时了SSL。 – 2011-04-06 20:13:50

3

就SSL/TLS的工作方式和证书交换而言,它们的答案基本上是正确的。但是,让我们专门看这个,因为它涉及到你的原始问题。

为了这个工作,代理服务器必须能够:

其中通用名称属性要连接的网站域名匹配
  1. 提供证书。换句话说,如果您想要访问https://www.example.com,则代理服务器必须能够以www.example.com或* .example.com作为通用名称提供证书。
  2. 代理提供的证书必须由您的浏览器信任的CA签名。尽管您的浏览器信任数十个CA,但理论上它们都不会使用通用名称www.example.com发布证书,除非您能证明您拥有该域名。

因此,实际上,要让代理服务器模仿企业环境之外的SSL/TLS会话是非常困难的。在企业环境中,这是一个不同的故事。公司通常在桌面上的浏览器中注册自己的内部CA证书。当您使用TLS登录您的银行时,企业网络代理通常会使用正确的域名向您的浏览器生成证书。您的浏览器会看到https://www.mybank.com和来自受信任的CA的匹配证书,非常高兴。同时,企业网络代理向您的银行维护单独的TLS会话。在这之间,代理能够记录您的所有HTTPS帖子并获取呼叫,包括任何形式的内容(如ID和密码)。

在公司环境之外,大多数攻击者不需要去那么麻烦,因为他们可以坐在Wi-Fi热点并运行SSLStrip。大多数人不会注意到该会话实际上不是SSL,特别是当攻击者将收藏夹图标更改为锁定符号时。

1

我认为在不使用证书并添加证书的情况下更容易解释此问题。

鉴于证书证明公钥,如果我们删除证书,您只需要公钥。如果您的站点有公钥并将其呈现给某个客户端,则只有拥有相应的私钥才有意义和目的。否则,你的虚张声势将被客户立即调用 - 客户将选择一个随机数字1729,使用公钥对其进行加密,并询问您选择的数字是什么。如果没有相应的私钥,你无法回答这个问题,客户会拒绝你。

所有来自被接受机构的证书都是为了证明网站skaz.com的公钥是xyz。如果我们没有证书,冒充者可以创建一个(公钥,私钥)密钥对(abc,mno),并告诉世界skaz.com的公钥是abc。

回答你的问题什么是阻止我把代理放在浏览器和真正的网站中间,只是发送真正的网站证书,这是经典的中间人攻击,如果在这种情况下的随机数--- 1729 ---加密的客户端被用作未来所有流量的加密密钥(也称为会话密钥),则该代理服务器不能做任何事情。对于例如如果客户端发送使用会话密钥加密的密码,那么冒充者代理不能读取它。

总之,您可以将任何实体的证书发送给任何人,但不知道相应的私钥是无效的。