了解SSL

时间:2011-05-24 21:46:35

标签: ssl

我有三个关于SSL的问题我还不完全理解。

  1. 如果我正确使用,服务器A会向某个CA提交请求。然后,它使用CA的私钥接收(在验证等之后)由公钥+身份+此信息的标识组成的数字证书。

    稍后,客户B想要与A打开SSL通信,因此A会发送B数字证书。

    我的问题是,B无法获取此证书,因此窃取了身份A - 这将允许他们以AC进行身份验证,例如。我了解C将使用CA的公钥解密证书,然后它将加密其对称密钥,该密钥只​​能由真实A解密。

    但是,如果B实际上可以窃取A的身份,我就看不到身份验证的位置。除非我遗漏了什么。

  2. 第二个问题:如果CA的一部分已经加密,为什么要在证书上使用哈希?这是不是意味着没有人可以乱用数字证书(很有可能)?

  3. 如果我是stackoverflow并且我有3台服务器做同样的事情 - 允许客户端访问,读取,识别等等 - 我是否必须为3台服务器中的每台服务器提供不同的数字证书。

  4. 非常感谢。

6 个答案:

答案 0 :(得分:69)

答案 1 :(得分:6)

  

我的问题是不能“B”只拿这个证书,从而窃取“A”的身份 - 这将允许他们认证为“A”到“C”

还有一个未传输的私有部分证书(私钥)。 没有私钥,B无法作为A进行身份验证。同样,我知道您的StackOverflow用户名,但这不会让我以您的身份登录。

  

如果CA的一部分已经加密,为什么要在证书上使用散列?

通过这种方式,任何人都可以验证它是产生哈希的CA,而不是其他人。这证明证书是由生成的,因此,“验证等”已经完成了。

  

如果我是stackoverflow并且我有3台服务器做同样的事情 - 允许客户端访问,读取,识别等 - 我是否必须为3台服务器中的每台服务器提供不同的数字证书。

这取决于具体情况,但每种情况下您可能都有相同的证书。

答案 2 :(得分:1)

第一个问题:您对从CA返回的内容是正确的,但在向CA提交请求之前,您缺少部分内容。您需要(1)证书请求,以及(2)相应的私人密钥。您不会将私钥作为请求的一部分发送;你把它保密在你的服务器上。您签名的证书包含相应 public 密钥的副本。在任何客户认为B“拥有”证书之前,B必须使用密钥来证明它,以便签署客户发送的质询。没有A的私钥,B不能这样做。

第二个问题:典型的公钥加密操作在固定大小的数据(例如,2048位)上,并且在某种程度上计算上很昂贵。因此,为了对任意大小的文档进行数字签名,文档将被散列为固定大小的块,然后使用私钥加密。

第三个问题:您可以在多个服务器上使用单个证书;您只需要在所有服务器上使用相应的私钥。 (当然,用于访问服务器的DNS名称必须与证书中的CN匹配,否则客户端可能会犹豫不决。但是,使用一个DNS名称引用多个服务器是一种常见且简单的负载均衡方法。)

答案 3 :(得分:1)

一般情况下,是的,如果证书文件被盗,没有什么能阻止某人在他们的服务器上安装它并突然假设被盗网站的身份。但是,除非窃贼接管原始站点的DNS设置,否则对站点URL的任何请求仍将转到原始服务器,窃贼的服务器将保持空闲状态。

这相当于建立了南极洲自由女神像的精确复制品,期望偷走纽约的旅游收入。除非你开始黑客攻击每一本旅游指南和历史教科书以取代南极洲的“纽约”,否则每个人都会去纽约看真正的雕像,而小偷只会有一个非常大的,绿色的,完全无声的冰柱。

但是,当您从CA获得证书时,证书受密码保护,不能简单地安装在Web服务器中。有些地方会删除密码,因此网络服务器可以自行重启而无需干预。但是安全站点会保留密码,这意味着任何服务器重新启动都会终止站点,直到有人进入管理控制台并输入PW来解密证书。

答案 4 :(得分:0)

我也有一些答案。

Q1)如果B窃取了A的证书并试图冒充A到C。

  • C将验证B的IP地址并发现它不属于C.它将中止SSL连接。当然,即使C发送加密消息,只有Real A才能解密它。

Q2)证书通常使用通用格式X.509以纯文本表示。任何人都可以阅读所有条目。散列过程用于对文档进行数字签名。数字签名证书使最终用户验证证书在创建后未被任何人更改。使用发行者的私钥对内容进行散列和加密是为了创建数字签名。

答案 5 :(得分:0)

问题N°1

  

不能B只拿这个证书[...],这将允许他们认证为A到C

较大partdiagram处理该问题。

主要是:如果您只有公钥,那么您无法与任何客户建立SSL连接,因为您需要与他们交换密钥,并且必须使用您的公钥加密该密钥,这就是为什么客户在第一时间要求它。客户端应该使用您的公钥加密共享密钥,您应该使用您的私钥解密它。由于您没有私钥,因此无法解密秘密交换密钥,因此您无法与任何客户端建立任何SSL通信。

问题N°2

  

如果证书的一部分已经存在,为什么要在证书上使用散列   由CA加密?

original diagram还通过“什么是签名?”这一问题回答了这个问题。基本上,我们正在对整个证书进行哈希处理,以确保它没有被篡改(数据完整性),没有人改变任何内容,并且你所看到的实际上是由CA提供的内容。该图显示了如何使这成为可能。

问题N°3

  

如果我是stackoverflow并且我有3台服务器[...]我必须有   3台服务器中每台服务器都有不同的数字证书。

情况并非总是如此。考虑所有三个服务器位于同一个域的情况,那么您只需要一个证书,如果每个证书都在自己的子域中,则可以在所有这些域上安装一个通配符证书。

相反,如果您有一台承载多个域的服务器,则您将拥有一个单一的多域SSL证书。