我正在使用具有相互 SSL 安全性的 WCF 服务,我想检查我对何时使用什么证书的理解。
这是正确的吗?
客户端将客户端公共(public)证书交给服务器
服务器将服务器公共(public)证书交给客户端
客户端发送使用服务器公共(public)证书加密的请求
服务器使用服务器私有(private)证书解密请求
服务器发送使用客户端公共(public)证书加密的响应
客户端使用客户端私有(private)证书解密响应
或者它以其他方式起作用吗?
最佳答案
RFC 2246,第 7.4 节详细介绍了握手。对于您的问题,其他版本的 SSL/TLS 的工作原理非常相似。
SSL/TLS 涉及两种类型的加密。非对称 key 加密和对称 key 加密。证书用于非对称 key 加密,并且仅在握手过程中使用。
证书使用的加密时间非常短,用在握手中。服务器公钥/私钥对(非对称 key )用于保护 session key (对称 key )。客户端公钥/私钥对用于向服务器证明客户端就是它所说的那个人。它知道这一点,因为客户端能够使用客户端私钥(只有它知道)来加密数据(双方都知道的数据),并且服务器可以使用客户端公钥对其进行解密。
对于排序,我在下面的摘要列表中将您问题的部分加粗。这是 MSDN 的精彩总结:
TLS 握手协议(protocol)涉及以下步骤:
- 客户端向服务器发送一条“Client hello”消息,以及客户端的随机值和支持的密码套件。
- 服务器通过向客户端发送“Server hello”消息以及服务器的随机值进行响应。
- 服务器将其证书发送给客户端进行身份验证,并可以向客户端请求证书。服务器发送“服务器问候完成”消息。
- 如果服务器已向客户端请求证书,客户端会发送该证书。
- 客户端创建一个随机 Pre-Master Secret,并使用服务器证书中的公钥对其进行加密,并将加密的 Pre-Master Secret 发送到服务器。
- 服务器接收 Pre-Master Secret。服务器和客户端各自根据 Pre-Master Secret 生成 Master Secret 和 session key 。
- 客户端向服务器发送“更改密码规范”通知,以指示客户端将开始使用新的 session key 对消息进行哈希处理和加密。客户端还发送“客户端完成”消息。
- 服务器收到“更改密码规范”并使用 session key 将其记录层安全状态切换为对称加密。服务器向客户端发送“服务器完成”消息。
- 客户端和服务器现在可以通过他们建立的安全通道交换应用程序数据。从客户端到服务器以及从服务器到客户端发送的所有消息均使用 session key 进行加密。
WCF请求/响应都将在客户端/服务器切换到使用 session key (对称 key )进行加密之后进行。此时它不会使用证书私钥/公钥。
关于WCF 相互 SSL 安全 何时使用什么证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13878362/