请解释WCF中客户端证书的概念

时间:2011-02-21 09:48:11

标签: c# wcf ssl-certificate

我是WCF和网络安全的新手,所以我非常感谢对以下概念的明确解释:

据我所知,如果我想创建与网站的安全连接,我需要拥有来自受信任机构的SSL证书,例如: Verisign,Thawte等。

现在我正在编写一个具有中央Web服务的SaaS应用程序,以及连接到中央Web服务的多个客户端应用程序。我想安全地进行客户端和服务器之间的所有通信,所以我的服务器上有SSL证书。

但是WCF现在提供了“客户端证书”的概念,它似乎必需来验证我的服务器端证书,而我完全不理解。客户端将被世界各地的一些匿名人员下载。我不知道他将会或不会安装哪些证书 - 我也不在乎!我想要的只是客户端和服务器之间的通信是安全的。我应该以某种方式在客户端上安装我自己的证书吗?

有人可以向我解释这些概念吗?

(当你在这里时,我有一个相关的问题here并且有一笔赏金。)

2 个答案:

答案 0 :(得分:2)

我认为你结合了两件不同的事情。 SSL基于非对称加密,它使用两个不同的密钥 - 公钥和私钥。当任何人都可以使用公钥来加密数据但只有私钥持有者才能解密数据时,加密就会起作用。在服务器上安装服务证书时,必须安装包含两个密钥的证书,但是您的客户端需要包含公钥的证书(否则他们将无法为您的服务加密消息)=>客户端必须能够使用公钥访问证书。使用受信任的证书颁发机构时,这应该不是问题,因为SSL(至少HTTPS)应该在初始握手期间交换此证书。

客户证书具有不同的含义。它通常用于客户端身份验证(而不是用户名和密码)。在消息安全的情况下,它还可以用于构建完全双向非对称加密和签名(SSL仅使用非对称加密来取代对称加密的唯一密钥)。

答案 1 :(得分:2)

不用担心 - 验证服务器证书不需要客户端证书。只要您想要实现的是客户端确信他或她正在与您的服务器通信并且没有其他人可以窃听或改变通信,您只需要服务器证书即可。但是,正如我在回答您的相关问题时所描述的那样,客户端确实需要信任服务器证书(这可能是您的问题所在。)

当服务器想要以比使用密码更安全的方式验证客户端的身份时,客户端证书就会发挥作用。 SSL / TLS(包括HTTPS,简称HTTP over SSL / TLS)确实支持客户端证书,它通常被称为“双面SSL”或“带客户端身份验证的SSL”。所有主流浏览器都支持这一点,WCF客户端也是如此,但正如我之前所说,它不是必需的(除非服务器明确要求它)。