【问题标题】:Certificates, Encryption, And Authentication证书、加密和身份验证
【发布时间】:2011-11-09 06:47:08
【问题描述】:

大多数情况下,我的困惑似乎源于我试图理解 WCF 上下文中的安全性。在 WCF 中,看起来证书可用于身份验证和加密。基本上,我试图理解:

  1. 如何将 X509 证书用作身份验证令牌? ssl 证书通常不是公开可用的吗?这不会使它们无法用于身份验证目的吗?如果没有,是否有一些通常用于此目的的协议?
  2. 使用 WCF 加密消息时,使用的证书是仅颁发给客户端、仅颁发给服务器还是同时颁发给两者?如果同时使用来自客户端和服务器的证书,我有点不清楚为什么。这主要源于我对 https 的理解,在这种情况下,只需要颁发给服务器的证书(并链接到由根 CA 颁发的某些证书​​)来建立加密连接并验证服务器。

我不完全确定这是正确的论坛。我的问题源于试图理解 WCF,但我想我想总体上理解这背后的理论。如果这是个好主意,请为我推荐正确的论坛。如有必要,我很乐意尝试迁移此问题。

提前致谢!

【问题讨论】:

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


    【解决方案1】:

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

    证书身份验证如何工作?

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

    它与 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 在内部以类似的方式工作,但密钥在整个连接生命周期内都是相同的。

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

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

    这意味着遵循算法

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

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

    这些是基础。它可能要复杂得多,因为消息安全性实际上允许您使用任意数量的证书 - 例如,您可以使用背书令牌用另一个证书签署主签名等。

    【讨论】:

    • 谢谢,这有帮助!在阅读了您的解释后,我觉得我能够更好地了解如何从安全的角度配置 wcf。您还提到了各种协议,如果需要,我可以查找更多信息,并且您在理论方面做得很好。再次感谢!
    【解决方案2】:

    证书只有公钥/私钥对的公钥。它没有私钥——这与证书本身是分开的。当您连接到 HTTPS 服务器时,您可以相信服务器是该证书的所有者,因为服务器 必须 持有私钥(希望没有其他人拥有它),否则 SSL 连接 不可能。如果服务器没有持有与其证书的公钥配对的私钥,它就无法为您提供有效的 SSL 连接。

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

    当您在 SSL 连接上提供可选的客户端证书时,服务器可以信任您,因为 1) 它可以看到签署您的客户端证书的 CA(或多个 CA),2) 它可以告诉您您拥有私钥由您拥有,否则 SSL 连接将无法实现。因此,对于信任客户端的服务器,它也可以反向工作。

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

    【讨论】:

      猜你喜欢
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多