证书,加密和身份验证

And*_*rew 3 https wcf ws-security certificate wcf-security

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

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

我不完全确定这是正确的论坛.我的问题源于试图理解WCF,但我想我想理解这背后的理论.如果这是一个好主意,请为我建议正确的论坛.如果有必要的话,我很乐意尝试迁移这个问题.

提前致谢!

Lad*_*nka 8

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

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

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

它与HTTPS有什么关系?

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

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

消息安全如何工作以及该场景中两个证书的目的是什么?

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

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

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

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

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

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

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

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

  • 启动器必须具有自己的证书,用于签署请求和解密响应
  • 收件人必须拥有自己的证书,用于解密请求和签署响应

这意味着遵循算法

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

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

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