我正在尝试创建一个非常简单的WCF客户端应用程序,它将SOAP消息发送到第三方服务。所有消息都必须经过数字签名。在将代码添加到更大的应用程序之前,它确实是一个概念验证。
我有一个包含证书的.cer文件和一个包含私钥的.pem文件。我一直试图做的是使用.cer文件加载证书然后触发消息。但是我收到以下错误“X.509证书中没有私钥”。
问题,其中一个问题是,我对WCF,数字证书,私钥以及所有那些guff几乎一无所知。我做了一些阅读,我用谷歌搜索直到我脸色发青,我没有任何地方。
如果我打开.cert文件,则会有一个标记为“BEGIN ENCRYPTED PRIVATE KEY”的部分,表明私钥包含在证书中。那么,为什么我收到一条消息说它不存在?另外,如果确实需要将私钥添加到证书中,我该怎么办?
这基本上就是我在做什么。这不是我的实际代码,但它包含了所有相关内容:
MyWSClient c = new MyWSClient();
c.ClientCredentials.ClientCertificate.Certificate = new X509Certificate2(@"pathToFile.cer");
c.SomeValidCall();
答案 0 :(得分:0)
您是如何创建此证书/密钥对的?您可以使用openssl将它们组合成PKCS#12证书:
openssl pkcs12 -export -in yourcert.crt -inkey yourprivkey.key -out newcert.p12
您可能需要使用输入格式才能使用.pem私钥。
答案 1 :(得分:0)
我的同事找到了解决方案。我不知道为什么但是使用.der文件而不是.cer文件解决了这个问题。这是他用于使用证书,私钥和根证书as.pem文件生成.der文件的命令:
openssl pkcs12 -export -in cert.pem -inkey private_key.pem -certfile root_cert.cer -out pkcs12.der