0

I have a question about WCF security. I don't have a specific problem but more of a general question.

If i create a WCF service and its protected using certificates, does every client that uses that service need to have the corresponding client certificate?

For instance if I have a Winforms client application that talks to the WCF service (which uses certificates), does the client have to have that matching client cert? - or can the client communicate without having the certificate installed?

Thanks.

4

2 回答 2

1

Frost 先生,让我先简要介绍一下证书的工作原理,这很重要:

  1. 浏览器(这里的浏览器是一个客户端,它可以是任何其他客户端)请求一个安全页面(通常是 https://)。

  2. Web 服务器将其公钥连同其证书一起发送。

  3. 浏览器检查证书是否由受信任方(通常是受信任的根 CA)颁发、证书是否仍然有效以及证书是否与所联系的站点相关。
  4. 然后,浏览器使用公钥加密随机对称加密密钥,并将其与所需的加密 URL 以及其他加密的 http 数据一起发送到服务器。
  5. Web 服务器使用其私钥解密对称加密密钥,并使用对称密钥解密 URL 和 http 数据。
  6. Web 服务器发回请求的 html 文档和使用对称密钥加密的 http 数据。
  7. 浏览器使用对称密钥解密 http 数据和 html 文档并显示信息。

现在客户端证书和服务器证书有什么区别,为此请参阅链接

现在回答你的问题“客户是否必须拥有匹配的客户证书”,是的,没有这个概念就行不通。

于 2013-06-25T11:39:45.967 回答
1

您可能会将服务器证书与客户端证书混淆。当您说该服务“受证书保护”时,尚不清楚您的意思是什么。服务器和客户端证书都可以“保护”服务,尽管方式不同——服务器证书通过加密通信,客户端证书通过将服务限制为仅授权客户端。

仅使用服务器证书的设置类似于通过 HTTPS 提供的任何网站 - 只有服务器“安装”了证书(意味着它具有证书的私钥)。尽管客户端没有自己的证书,但服务器将自己的证书传输给他们,并且他们可以使用它验证服务器的身份,假设他们信任签署证书的机构。此外,一旦建立了服务器身份,证书就为加密客户端和服务器之间的会话提供了基础。

到目前为止,还没有客户端身份验证:尽管客户端知道他们正在与他们想要的服务器交谈(感谢服务器证书),并且所有通信都是加密的,但服务器无法验证身份连接到它的客户端。客户端证书是执行客户端身份验证的一种方式;更熟悉的替代方法是用户名和密码。

要使用客户端证书,每个客户端都必须有一个有效的证书和私钥,这与服务器的证书不同。同样,服务器不一定存储这些证书的本地副本——它们在安全握手期间交换。

在此上下文中,“有效”是指使用某些既定标准(例如,客户端证书的白名单,或要求客户端证书由特定机构颁发),可以作为服务器的身份手段接受。虽然客户端通常可以简单地信任证书颁发机构链直到受信任的根,以便接受服务器证书有效,但必须对可接受的客户端证书施加一些额外的限制才能用于身份验证 - 它不会在大多数情况下,允许任何具有受信任证书的任意客户端连接到配置为使用客户端证书对客户端进行身份验证的服务是有帮助的。

于 2013-06-25T10:48:02.280 回答