我需要一个完全相同的问题的答案...
用 128 位密钥对事物进行加密,费尽千辛万苦地处理一堆难以辨认的首字母缩略词,并使用与我的信用卡余额一样大的质数等等,这似乎很可笑……毕竟你会去和将您的私钥导出到每台客户端计算机,仅受证书文件上的(可能不安全的)密码保护。疯狂的事情。无意义。
要记住的一件事是服务器和客户端都需要解密消息,而解密显然需要私钥。
因此,我认为避免将服务器的私钥发送给所有人的唯一方法是拥有 2 个不相关的证书,一个用于服务器,一个用于客户端。
当消息从客户端发送到服务器时,客户端仅使用服务器的公钥进行加密。然后服务器使用其私钥解密。
当从服务器向客户端发送消息(或更类似于回复)时,服务器使用客户端的公钥加密,客户端使用自己的私钥解密。瞧?
至少这样服务器的私钥永远不会在服务器之外发布。然而,客户端私钥仍然随处可见。
我认为它可以归结为 4 种情况,它们以不同程度的满意度处理 -
1) 从客户端发送到服务器的消息 - 使用服务器的公钥加密的消息。服务器证书必须在客户端可用。服务器私钥不必存在。由于服务器的公钥很容易访问,因此对于 rouge 客户端来说,加密并向服务器发送消息相对容易。
2) 在服务器上收到消息- 使用服务器的私钥解密消息。此私钥仅驻留在服务器上,因此非常安全(物理安全?)。除非您将副本放在公共 FTP 文件夹中,或启用远程访问,否则其他人不应访问包含私钥的服务器证书。即使有人获得了服务器证书,他们仍然需要猜出您的出色密码,对吗?顺便说一句,我不知道受密码保护的证书文件可以被“破解”。
3) 从服务器发送到客户端的回复- msg 使用客户端的公钥加密。所以服务器需要客户端证书(不需要私钥)。客户端公钥再次在任何地方都很容易获得,因此很容易拦截从客户端到服务器的原始消息,忽略其内容(因为没有服务器的私钥就无法解密它),并发送某种加密响应回到客户端只是为了看看客户端如何解释它。乐趣。
4) 客户端收到的来自服务器的回复- 使用客户端的私钥解密的 msg。此私钥位于证书文件中的所有客户端计算机上,仅受密码保护……因此相对不安全。
当然,如果您不太担心安全性,另一种选择是将服务器证书发送到任何地方(包括服务器私钥)并将其用作服务器和客户端证书。我相信很多人都会这样做。
这个答案包含相当多的猜测和点连接,因为我找不到明确的解释。我很想知道我是否接近了。
==================================================== ================================
更新:到达那里 - http://msdn.microsoft.com/en-us/library/ms733102.aspx