【问题标题】:WCF Mutual SSL Security What Certificates Are Used When?WCF Mutual SSL Security 什么时候使用什么证书?
【发布时间】:2012-12-14 12:05:41
【问题描述】:

我正在使用具有相互 SSL 安全性的 WCF 服务,我想检查我对何时使用什么证书的理解。

这对吗?

  1. 客户端将客户端公共证书交给服务器

  2. 服务器将服务器公共证书交给客户端

  3. 客户端发送使用服务器公共证书加密的请求

  4. 服务器使用服务器私有证书解密请求

  5. 服务器发送使用客户端公共证书加密的响应

  6. 客户端使用客户端私有证书解密响应

或者它是否以其他方式起作用?

【问题讨论】:

  • RFC 2246 第 7.4 节很好地详细介绍了握手:tools.ietf.org/html/rfc2246。
  • 如果你能把它总结成一个答案,我会给你一些分数;)

标签: wcf wcf-security x509certificate ssl


【解决方案1】:

RFC 2246,第 7.4 节详细介绍了握手。就您的问题而言,其他版本的 SSL/TLS 的工作方式非常相似。

SSL/TLS 涉及两种类型的加密。非对称密钥加密和对称密钥加密。证书用于非对称密钥加密,仅在握手过程中使用。

证书使用的加密时间很短,在握手时使用。服务器公钥/私钥对(非对称密钥)用于保护会话密钥(对称密钥)。客户端公钥/私钥对用于向服务器证明客户端就是它所说的那个人。它知道这一点,因为客户端能够使用客户端私钥(只有它知道)加密数据(双方都知道的数据),而服务器可以使用客户端公钥对其进行解密。

对于排序,我在下面的摘要列表中用粗体显示了您的问题部分。这是来自MSDN 的精彩总结:

TLS 握手协议涉及以下步骤:

  1. 客户端向服务器发送“Client hello”消息,以及客户端的随机值和支持的密码套件。
  2. 服务器通过向客户端发送“Server hello”消息以及服务器的随机值作为响应。
  3. 服务器将其证书发送给客户端进行身份验证,并可能向客户端请求证书。服务器发送“Server hello done”消息。
  4. 如果服务器已向客户端请求证书,客户端会发送它。
  5. 客户端创建一个随机的 Pre-Master Secret 并使用来自服务器证书的公钥加密,将加密的 Pre-Master Secret 发送到服务器。
  6. 服务器接收到 Pre-Master Secret。服务器和客户端各自根据 Pre-Master Secret 生成 Master Secret 和会话密钥。
  7. 客户端向服务器发送“更改密码规范”通知以指示客户端将开始使用新的会话密钥对消息进行散列和加密。客户端还会发送“客户端完成”消息。
  8. 服务器收到“更改密码规范”并使用会话密钥将其记录层安全状态切换为对称加密。服务器向客户端发送“服务器完成”消息。
  9. 客户端和服务器现在可以通过他们建立的安全通道交换应用程序数据。从客户端发送到服务器以及从服务器发送到客户端的所有消息都使用会话密钥加密。

WCF 请求/响应都将在客户端/服务器切换到使用会话密钥(对称密钥)进行加密之后。此时它不会使用证书私钥/公钥。

【讨论】:

  • 这是一个很好的答案——最后一个小问题。我可以看到如何证明服务器证书。客户端使用服务器公钥加密,所以需要服务器私钥解密。服务器如何从客户端获得相同的保证(即如果“未知”向客户端发送公共证书,服务器如何知道来源是坏的?)
  • 当然 - 这在第 7.4.8 节 (Certificate Verify) 中有详细说明。 “未知客户端”使用客户端私钥加密一段数据(客户端和服务器都知道这段数据),服务器使用客户端公钥对其进行解密。然后服务器将其预期的内容与实际解密的内容进行比较。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-07
  • 2011-09-28
相关资源
最近更新 更多