证书,加密和身份验证

时间:2011-09-02 15:23:14

标签: wcf https wcf-security ws-security certificate

大多数情况下,我的混淆似乎是从我在WCF环境中理解安全性的尝试中解脱出来的。在WCF中,看起来证书可用于身份验证和加密。基本上,我试图理解:

  1. 如何将X509证书用作身份验证令牌? ssl证书通常不是公开的吗?这不会使它们无法用于身份验证吗?如果没有,是否有一些通常用于此目的的协议?
  2. 使用WCF加密邮件时,使用的证书是仅发给客户端的证书,只发给服务器,还是两者都发出?如果使用来自客户端和服务器的证书,我有点不清楚为什么。这主要源于我对https的理解,在这种情况下,只有颁发给服务器的证书(并且链接到根CA颁发的某些证书​​)才有必要建立加密连接并验证服务器。
  3. 我不完全确定这是正确的论坛。我的问题源于试图理解WCF,但我想我想理解这背后的理论。如果这是一个好主意,请为我建议正确的论坛。如果有必要的话,我很乐意尝试迁移这个问题。

    提前致谢!

2 个答案:

答案 0 :(得分:8)

这是一个非常复杂的问题。我将尝试解释一些部分,但尽可能避免细节(即使之后它会很长)。

  

如何使用证书进行身份验证?

如果私钥的持有者签署了一些数据,其他参与者可以使用签名者的公钥来验证签名。此机制可用于身份验证。私钥和公钥存储在证书中,其中私钥在持有者机器上是安全的,而带有公钥的证书可以公开获得。

  

它与HTTPS有什么关系?

WCF提供传输和邮件安全性。它们之间的区别在于here。 HTTP的传输安全性是HTTPS,其中只有服务器需要颁发证书,客户端必须信任此证书。此证书既用于向客户端验证服务器,也用于建立安全通道(使用对称加密)。

HTTPS还提供称为Mutual HTTPS的变体,其中客户端必须也已颁发证书,客户端使用证书对服务器进行身份验证。

  

在这种情况下,邮件安全性如何工作以及两个证书的目的是什么?

在邮件安全的情况下,每条邮件都是单独签名,加密和验证的=所有这些安全信息都是邮件的一部分。在SOAP的情况下,这由许多规范描述,但通常您对安全绑定和X.509令牌配置文件感兴趣。

安全绑定是WS-SecurityPolicy断言的一部分,它描述了消息的安全性。我们有三个绑定:

  • 对称安全绑定 - 对称加密
  • 非对称安全绑定 - 非对称加密
  • 传输安全绑定 - 断言必须通过HTTPS或其他安全传输发送消息

X.509令牌配置文件指定如何在邮件中传输证书(公钥)以及如何使用它们。

现在,如果您具有对称安全绑定,则只需要服务器证书,因为

  • 当客户想要向服务器发送消息时,它将首先生成随机密钥。
  • 它将使用此密钥加密和签署请求
  • 它将使用服务证书加密派生密钥并将其传递给请求。
  • 当服务器收到消息时,它将首先使用其私钥来解密该密钥。
  • 它将使用解密密钥解密其余信息。
  • 它还将使用密钥加密响应,因为客户端知道该密钥。
  • 客户端将使用为请求生成的相同密钥来解密响应

这是对称加密,比非对称加密快得多,但WS-Security 1.0中不应提供密钥派生。它在WS-Security 1.1中可用。 HTTPS内部工作方式类似,但整个连接生命周期的密钥相同。

如果您有非对称安全绑定,则需要两个证书:

  • 发起人必须拥有自己的证书,用于签署请求和解密回复
  • 收件人必须拥有自己的证书,用于解密请求并签署回复

这意味着遵循算法

  • 发起人使用收件人的公钥加密请求
  • 发起人使用私钥签署请求
  • 收件人使用发起人的公钥来验证请求签名
  • 收件人使用其私钥解密请求
  • 收件人使用发起人的公钥加密响应
  • 收件人使用其私钥签署回复
  • 发起人使用收件人的公钥来验证响应签名
  • Initiator使用其私钥解密响应

签名和加密的顺序可以改变 - 还有另一个WS-SecurityPolicy断言说明应该先做什么。

这些是基础知识。它可能要复杂得多,因为邮件安全性实际上允许您拥有所需数量的证书 - 例如,您可以使用签名令牌与其他证书等签署主要签名。

答案 1 :(得分:1)

证书仅具有公钥/私钥对的公钥。它没有私钥 - 这与证书本身是分开的。当您连接到HTTPS服务器时,您可以信任该服务器是该证书的所有者,因为服务器必须持有私钥(并且希望没有其他人拥有它),否则SSL连接< em>不可能。如果服务器没有保存与其证书的公钥配对的私钥,则它无法向您显示有效的SSL连接。

然后,您可以根据已签署证书链的一个或多个证书颁发机构(CA)来确定您是否信任该特定证书。例如,可能只有一个CA已签署此证书。您在本地拥有受信任的CA根证书,因此您知道它实际上是您的可信CA签署了该服务器证书,因为签名是不可能的,除非该CA 保持私有密钥到CA证书。再次它只是持有私钥,在这种情况下,证明谁签署了证书。这是您可以信任证书的方式。

当您在SSL连接上显示可选的客户端证书时,服务器可以信任您,因为1)它可以看到签署客户端证书的CA(或CA),以及2)它可以告诉您拥有私钥在你拥有,因为否则SSL连接是不可能的。因此,它也适用于信任客户端的服务器。

如果您相信服务器和客户端将其私钥保密,并且您信任签署服务器和客户端证书(或证书链)的根证书的来源,则可以说每个人都是诚实的。 / p>