这是一个相当复杂的问题。我将尝试解释一些部分,但尽可能避免细节(即使之后会很长)。
证书身份验证如何工作?
如果私钥的持有者签署了一些数据,其他参与者可以使用签名者的公钥来验证签名。该机制可用于身份验证。私钥和公钥存储在证书中,私钥安全地保存在持有者机器上,而带有公钥的证书可以公开使用。
它与 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 断言说明应该首先做什么。
这些是基础。它可能要复杂得多,因为消息安全性实际上允许您使用任意数量的证书 - 例如,您可以使用背书令牌用另一个证书签署主签名等。