1

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

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

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

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

也许我错过了一些东西;我已经用谷歌搜索了很多,大多数解决方案都表示导出私钥。

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

感谢您的任何建议。

4

1 回答 1

1

我需要一个完全相同的问题的答案...

用 128 位密钥对事物进行加密,费尽千辛万苦地处理一堆难以辨认的首字母缩略词,并使用与我的信用卡余额一样大的质数等等,这似乎很可笑……毕竟你会去和将您的私钥导出到每台客户端计算机,仅受证书文件上的(可能不安全的)密码保护。疯狂的事情。无意义。

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

因此,我认为避免将服务器的私钥发送给所有人的唯一方法是拥有 2 个不相关的证书,一个用于服务器,一个用于客户端。

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

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

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

我认为它可以归结为 4 种情况,它们以不同程度的满意度处理 -

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

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

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

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

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

这个答案包含相当多的猜测和点连接,因为我找不到明确的解释。我很想知道我是否接近了。

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

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

于 2012-11-21T10:28:38.293 回答