使用没有私钥的 X.509 证书的 C# 解密

C# Decryption with X.509 certificate without private key

客户端使用 X.509 证书加密消息并将加密的消息发送到我的网络服务器。客户端提供了没有私钥的 X.509 证书(导出为 DER 编码的二进制 X.509 (.cer))。现在我的任务是使用我拥有的 X.509 证书解密消息。

每当我尝试解密消息时,我都会收到“私钥不存在”异常,这是预期的,因为证书不包含私钥。没有私钥使用x.509证书解密消息是否可行?

其次,如果客户端单独为证书提供密码,我可以创建一个 X509Certificate2 实例并使用它来解密消息,如:

X509Certificate2 c = new X509Certificate2("filename", "password");

您将需要私钥来解密邮件。例如,您可以要求您的客户为您提供一个包含私钥的 .pfx 文件,但是,这有点倒退,因为通常使用非对称加密,发送方(您的客户)应该使用接收方的加密消息(您的)public 密钥,您使用接收方的(您的)私钥对其进行解密。这样私钥就不会共享给多方,从而降低了它被泄露的可能性。私钥的整体理念是它是私有的——只有密钥的所有者才能使用它。

编辑:关于第二个问题,密码不是私钥。您可以生成一个受密码保护的私钥。这意味着为了使用私钥进行解密,您还必须知道保护该私钥的密码。

编辑 2:我不确定这是否有帮助,但不久前我一直在努力理解如何实际应用这些概念,所以我写了一系列 blog posts 可能对您有所帮助.我不自称是安全专家,但我写的内容可能会让您入门。