wcf - C# WCF 客户端错误 "The private key is not present in the X.509 certificate"

标签 wcf wcf-security wcf-client x509certificate private-key

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

我有一个包含证书的 .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();

最佳答案

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

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

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

关于wcf - C# WCF 客户端错误 "The private key is not present in the X.509 certificate",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6995841/

相关文章:

c# - WCF认证

c# - WCF 4.0、.NET 2.0 客户端和 .NET 类型

error-handling - WCF net.tcp 服务器断开连接 - 如何在客户端正确处理?

wcf - OData/WCF 数据服务不适用于复杂类型

.net - 通信策略 : Linux to .Net over SSL

wcf - 使用 WCF : no CertificateRequest and CertificateVerify in handshake phase 的相互 SSL 身份验证

c# - 从同一进程托管和使用 WCF 服务

wcf - 如何在WCF服务中访问HttpContext.Current.User.Username

c# - 通过默认成员身份提供程序进行 Web 服务身份验证

c# - 使用传输模式证书保护 WCF