6

在我将在本地网络上托管的服务之间使用 ssl 证书之前,我想了解更多关于它的信息。通过在互联网上阅读,这就是我了解 SSL 的工作原理的方式。

  1. 客户端连接到 WCF 服务
  2. WCF 服务用它的公钥和它的证书回复
  3. 然后客户端验证证书并使用公钥加密他的凭据
  4. 然后 wcf 服务使用它的私钥解密该消息并验证信息
  5. ETC...

知道这里有一些我不明白的事情:

  • 在第 4 步中。WCF 服务在哪里找到它的私钥?
  • 为什么需要 SSL 证书?通过在互联网上阅读,需要验证该服务是否是我想要的。这对我来说没有意义,因为首先我知道我的服务在本地网络上的 IP 地址(我知道该服务是谁)。假装这不是我在互联网上的情况,并且有人试图破解我。在这种情况下,我相信如果我连接到他们的服务而不是我的真实服务,我将无能为力,因为如果您在第 2 步中回想 WCF 服务用公钥和证书(纯文本)回复,这意味着有人可以抓住该证书并使用它吗?
  • 如果我使用 SSL 证书并且有人可以访问托管该服务的计算机,他可能会以某种方式获取私钥,从而使我的连接不安全?
4

2 回答 2

16

首先,第三步中缺少一些步骤。第三步实际发生的是:

  • 客户端验证证书
  • 客户端和服务器来回发送一些消息,从而协商他们都可以使用哪种密钥加密
  • 客户端为该加密算法创建一个密钥,使用服务器的公钥加密该密钥并将加密的密钥发送到服务器。
  • 服务器现在可以使用他们的私钥解密密钥。
  • 客户端和服务器现在就密钥算法达成一致,并且他们共享密钥。现在,所有通信都使用共享密钥进行加密和解密。
  • 客户端使用密钥加密他们的凭据...

原因是双重的。首先,公钥加密的数学比秘密密钥加密的数学要昂贵得多。这个想法是只做一次昂贵的数学运算,以实现共享秘密的交换。其次,客户端知道服务器的公钥,但客户端可能连公钥都没有,那么服务器怎么给它发秘密消息呢?这就是为什么他们必须就共享密钥达成一致。

无论如何继续你的问题:

服务将其私钥保存在哪里?

在 Windows 上,它位于操作系统提供的证书存储中。在其他操作系统上,我不知道。

为什么需要证书?

假设您想用信用卡购买我的割草机,但您担心我实际上可能是个骗子。你想知道我的真实姓名,这样如果我开始用你的卡向我的拉斯维加斯之旅收费,你就可以起诉我。

所以当我们进行交易时,我给你看一张纸,上面写着“Eric Lippert 声称这张纸的所有者是 Eric Lippert,签名,Eric Lippert”。你相信我吗?如果您已经信任 Eric Lippert,那么您就不需要这张纸,如果您不信任 Eric Lippert,那么该纸就无法建立信任。这是一个“自签名证书”。

现在,如果我给你看一张纸,上面写着“VeriSign 公司声称这张纸的所有者是 Eric Lippert,签署了 VeriSign”,那么问题是:你相信 VeriSign 已经验证了我的身份吗?如果你这样做了,那么这就是你正在与之交谈的人是他们声称的人的证据。

这就是证书的目的。它确定一个特定的公钥确实与一个特定的组织相关联,因为它是由一个称为认证机构的相互信任的第三方签署的

当您使用信用卡在线购买商品时,您可能相信该网站只会对该卡进行授权收费。该证书验证您将用于加密的公钥确实是该网站的公钥,而不是某些邪恶黑客的公钥。

但是带有公钥的证书是公开的,所以不能有人抢到证书冒充服务器吗?

是的,但这对他们没有帮助,除非他们窃取了私有密钥。拥有他人证书的人无法解密使用公钥加密的消息,因此他们将无法与客户端进行密钥交换!即使他们设法欺骗了客户端,他们将得到的只是用客户端选择的密钥编码的比特流,攻击者如果没有证书的私有部分就无法获得该密钥。

这意味着:如果我允许访问我的私钥,那么有人可以冒充我,对吧?

是的。整个系统的安全性取决于保持私有的私钥。这就是为什么它被称为私钥如果攻击者获得了您的私钥的访问权限,那么他们可以随意冒充您,因此请保密,确保安全。如果您的密钥被泄露,有一种机制可以撤销证书,但通常已经造成损害。

于 2013-06-02T15:00:47.507 回答
6

Eric Lippert 的回答很棒,但我想我会添加更多细节来回应几点:

  • 这对我来说没有意义,因为首先我知道我的服务在本地网络上的 IP 地址(我知道该服务是谁)

是的,如果您在内部和 Intranet 或受信任的安全 LAN 上,SSL 验证服务器身份是否正确确实可能没有多大好处。但是,SSL 或更准确地说是 TLS(传输层安全性),为您提供了在客户端和服务器之间进行通信的加密通道。这意味着如果您的客户端和服务器之间的任何人正在嗅探网络,他们将无法阅读该消息。TLS (SSL) 是实现这一目标的最受支持和最简单的方法。

  • 如果我使用 SSL 证书并且有人可以访问托管该服务的计算机,他可能会以某种方式获取私钥,从而使我的连接不安全?

如果某人对存储私钥的服务器(在证书中)具有管理员访问权限,并且该人具有恶意意图,那么坦率地说,您在此之前已经失去了很长时间。在证书存储中存储证书时,您可以设置有关谁能够读取、写入和修改证书的特定权限。

希望这可以帮助。

于 2013-06-02T15:46:52.037 回答