3

我正在尝试创建一个非常简单的 WCF 客户端应用程序,它将 SOAP 消息发送到第 3 方服务。所有消息都必须经过数字签名。在我将代码添加到更大的应用程序之前,这确实是一个概念证明。

我有一个包含证书的 .cer 文件和一个包含私钥的 .pem 文件。我一直在尝试做的是使用 .cer 文件加载证书,然后发出一条消息。但我收到以下错误“X.509 证书中不存在私钥”。

问题,其中一个问题是,我真的对 WCF、数字证书、私钥和所有这些废话几乎一无所知。我做了一些阅读,我用谷歌搜索,直到我脸色发青,我一无所获。

如果我打开 .cert 文件,则会有一个标记为“BEGIN ENCRYPTED PRIVATE KEY”的部分,这表明私钥包含在证书中。那么,为什么我收到一条消息说它不存在?另外,如果确实需要将私钥添加到证书中,我该怎么做?

这里基本上是我在做什么。这不是我的实际代码,但它包含所有相关内容:

MyWSClient c = new MyWSClient();
c.ClientCredentials.ClientCertificate.Certificate = new X509Certificate2(@"pathToFile.cer");
c.SomeValidCall();
4

2 回答 2

0

您如何创建此证书/密钥对?您可以使用 openssl 将它们组合成 PKCS#12 证书:

openssl pkcs12 -export -in yourcert.crt -inkey yourprivkey.key -out newcert.p12 

您可能需要使用输入格式才能使其与 .pem 私钥一起使用。

于 2011-08-09T12:53:28.803 回答
0

我的同事找到了解决方案。我不知道为什么,但使用 .der 文件而不是 .cer 文件可以解决问题。这是他使用证书、私钥和根证书 as.pem 文件生成 .der 文件的命令:

openssl pkcs12 -export -in cert.pem -inkey private_key.pem -certfile root_cert.cer -out pkcs12.der
于 2011-08-09T15:26:50.067 回答