WCF客户端错误“X.509证书中不存在私钥”

时间:2012-10-10 03:49:06

标签: wcf certificate x509

我试图让WCF客户端使用TransportWithMessageCredential与IIS托管WCF服务进行通信。

在这种情况下,我们将有大约20个客户端都运行客户端应用程序。计划他们将使用相同的证书与我们的服务器通信以提供加密(识别是单独处理的)。我们的服务器根网站已配置了证书。 WCF服务将从子站点运行,我希望使用相同的证书来保护从我们的客户端应用程序到服务的访问。

如果我在客户端安装PFX证书,一切都很好。但我不想从我们的服务器导出私钥 - 这不是一个安全问题吗?

如果我安装了CER证书文件,运行我的客户端应用程序,我收到错误 - “X.509证书中没有私钥” - 听起来合理,因为我没有导出一个

也许我错过了一些东西;我已经google了很多,大多数解决方案都声明要导出私钥。

有没有办法在不从我们的服务器导出私钥的情况下使用CER证书文件?或者什么是最佳实践。

感谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

我需要回答完全相同的问题......

在用128位密钥加密所有麻烦之后,通过难以辨认的首字母缩略词和使用与我的信用卡余额等一样大的素数等来解决所有这些麻烦似乎很荒谬......毕竟那些麻烦你' d将您的私钥导出到每台客户端计算机,仅受证书文件上的(可能不安全的)密码保护。疯狂的事情。没有意义的。

要记住的一件事是,服务器和客户端都需要解密消息,而解密则需要显示私钥。

所以他们只能看到以避免将服务器的私钥发送给所有人,而且杂物是拥有2个不相关的证书,一个用于服务器,一个用于客户端。

当客户端向服务器发送消息时,客户端仅使用服务器的公钥进行加密。然后服务器使用其私钥解密。

当从服务器向客户端发送消息(或更多回复)时,服务器使用客户端的公钥进行加密,客户端使用自己的私钥进行解密。瞧?

至少这样,服务器的私钥永远不会在服务器外部发布。然而,客户端私钥仍然随处可见。

我认为它可归结为4个以不同程度的满意度处理的情景 -

1)从客户端发送到服务器的消息 - 使用服务器的公钥加密的消息。必须在客户端上提供服务器证书。不必存在服务器私钥。对于路由客户端来说,加密并向服务器发送消息相对容易,因为服务器的公钥可以随时访问。

2)在服务器上收到消息 - 使用服务器的私钥解密消息。此私钥仅驻留在服务器上,因此非常安全(物理安全性?)。除非您将副本放在公共FTP文件夹中,或启用远程访问,或者某些东西,否则其他人不应该访问包含私钥的服务器证书。即使有人获得服务器证书,他们仍然需要猜出你的精彩密码吗?顺便说一句,我不知道密码保护的证书文件可以“破解”。

3)从服务器发送到客户端的回复 - 使用客户端的公钥加密消息。所以服务器需要客户端证书(不需要私钥)。客户端公钥在任何地方都可以轻松获得,因此从客户端到服务器拦截原始消息很容易,忽略其内容(因为没有服务器的私钥就无法解密),并发送某种加密响应回到客户端只是为了看客户端如何解释它。乐趣。

4)客户端收到的服务器回复 - 使用客户端的私钥解密msg。此私钥位于证书文件中的所有客户端计算机上,仅受密码保护...因此它相对不安全。

当然,如果您不太担心安全问题,另一个选择是将服务器证书放在任何地方(包括服务器私钥),并将其用作服务器和客户端证书。我相信很多人都这样做。

这个答案包含了相当多的推测和答案。点加入,因为我无法找到明确的解释。我很想知道我是否已经接近了。

=============================================== ==================================

更新:到达那里 - http://msdn.microsoft.com/en-us/library/ms733102.aspx