c# - 证书中没有私钥的证书认证和消息安全

标签 c# wcf ssl ssl-certificate

我对 WCF(客户端)中的证书有疑问。

我收到了三个证书:

  • 远程服务器的SSL证书
  • 客户端证书(用于用户认证)
  • 根证书

注意:没有证书有私钥


在 WCF 中,可以使用证书身份验证。这是我的示例:

var sslBinding = new BasicHttpBinding(BasicHttpSecurityMode.TransportWithMessageCredential);
sslBinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate;
sslBinding.MessageEncoding = WSMessageEncoding.Mtom;

var certificate= new X509Certificate2(_certificatesFullPath, _certificatePassword, X509KeyStorageFlags.MachineKeySet);
var userCertificate = new X509Certificate2(_userCertificate, "", X509KeyStorageFlags.MachineKeySet);

var identity = new X509CertificateEndpointIdentity(userCertificate);
var endPoint = new EndpointAddress(new Uri(_endPointURI), identity);

using (Test.SdIRiceviNotificaClient client = new Test.SdIRiceviNotificaClient( sslBinding, endPoint))
{
        client.ClientCredentials.ClientCertificate.Certificate = certificate;


        client.Open();

        var result = await client.NotificaEsitoAsync(new Test.NotificaEsitoRequest(idSdI.ToString(), fileName, XmlUtils.GetXmlBytes(new NotificaEsitoCommittente())));

        client.Close();
}

我现在的问题是我收到了这个异常:

The private key is not present in the X.509 certificate.

我知道没有证书有私钥,我不能要求其他证书。


我拥有的唯一信息:所有证书都应在 p12 容器中使用。
我只是在创建 p12 文件时遇到问题(没有私钥 => 好的,“-nokeys”参数有可能)。

我这样做了:

openssl x509 -in CAEntratetest.cer -outform PEM -out CAEntratetest.pem
openssl x509 -in SDI-xxxxxxxxxxx.cer -inform DER -out SDI-xxxxxxxxxxx.pem -outform PEM
openssl x509 -in testservizi.fatturapa.it.cer -inform DER -out testservizi.fatturapa.it.pem -outform PEM

cat CAEntratetest.pem SDI-xxxxxxxxxxx.pem testservizi.fatturapa.it.pem > sum.pem

要创建 p12 文件,我需要一个私钥:

openssl pkcs12 -export -in sum.pem -inkey private.key -out output.p12

如果我创建一个新 key => 它不起作用(没有证书匹配私钥)

是否可以在没有私钥的情况下使用证书?

最佳答案

不可以,没有私钥就不能使用证书进行身份验证。

X.509 的安全性基于身份验证的机制依赖于公钥加密,其中生成公钥和私钥。只有隐私部分应该保密。

您拥有的是公钥。使用您的私钥 签名可以证明您“拥有”公钥以及您的身份验证方式。

另请注意:您不能简单地为公钥生成新的私钥。 key 是一对。

关于c# - 证书中没有私钥的证书认证和消息安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48909851/

相关文章:

c# - 发送大量消息时出现 SocketException(代码 10048)

c# - 如何为图表中的列添加背景颜色

c# - 为什么代码生成名为 <>c__DisplayClass1 的 MSIL 类

c# - WCF 数据服务使用基于 EF 的存储库中的数据

python - dev_appserver.py 无法发出 SSL 请求的解决方法

java - Quarkus 原生镜像 : Load a PKCS12 file at runtime

ssl - 无法使用 Ansible 在 ELB 上添加 SSL 证书

c# - 最近的 Twitter API 1.1 的 Twitterizer 版本

c# - 了解来自 MSDN 的 NetworkStream.EndRead() 示例

WCF 服务和 Thinktecture Identity 服务器