我对WCF安全性有疑问。我没有具体问题,但更多的是一般性问题。
如果我创建一个WCF服务并使用证书保护它,那么使用该服务的每个客户端是否都需要具有相应的客户端证书?
例如,如果我有一个与WCF服务(使用证书)对话的Winforms客户端应用程序,客户端是否必须具有匹配的客户端证书? - 或者客户端可以在没有安装证书的情况下进行通信吗?
感谢。
答案 0 :(得分:1)
您可能会将服务器证书与客户端证书混淆。当您说服务“受证书保护”时,您的意思并不清楚。服务器和客户端证书都可以通过不同的方式“保护”服务 - 通过加密通信来获取服务器证书,通过仅限授权客户端的服务来限制客户端证书。
仅使用服务器证书的设置类似于通过HTTPS提供的任何网站 - 只有服务器具有“已安装”证书(意味着它具有证书的私钥)。虽然客户端没有自己的证书,但服务器会向其发送自己的证书,并且可以验证服务器的身份,假设他们信任签署证书的权限。此外,一旦建立了服务器身份,证书就为加密客户端和服务器之间的会话提供了基础。
到目前为止,在这个故事中,没有客户端身份验证:虽然客户知道他们正在与他们想要的服务器通信(感谢服务器证书),并且所有通信都是加密的,但是服务器无法验证连接到它的客户的身份。客户端证书是一种执行客户端身份验证的方式;更熟悉的替代方案是用户名和密码。
要使用客户端证书,每个客户端必须具有有效的证书和私钥,这与证书服务器的证书不同。同样,服务器不一定存储这些证书的本地副本 - 它们在安全握手期间被交换。
在此上下文中的“有效”意味着可以使用一些既定标准(例如,客户端证书的白名单,或要求客户证书由特定授权机构颁发)作为服务器的身份识别手段。虽然客户通常可以信任证书颁发机构链直到受信任的根,以便接受服务器证书有效,但必须对可接受的客户端证书施加一些额外的限制对身份验证非常有用 - 在大多数情况下,允许任意具有受信任证书的任意客户端连接到配置为使用客户端证书对客户端进行身份验证的服务都没有用。
答案 1 :(得分:1)
先生。弗罗斯特,让我首先说明证书如何运作的简短序列,这一点非常重要:
浏览器(此处浏览器是客户端,可以是任何其他客户端)请求安全页面(通常为https://)。
Web服务器使用其证书发送其公钥。
现在客户端和服务器证书之间有什么区别,为此请参考Link
现在回答你的问题"客户端是否必须拥有匹配的客户端证书",是的,如果没有它,这个概念就不起作用。