【问题标题】:Certificate Authentication and Message Security without private key in the certificate证书中没有私钥的证书身份验证和消息安全
【发布时间】:2018-02-21 15:39:59
【问题描述】:

我对 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();
}

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

X.509 证书中不存在私钥。

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


我拥有的唯一信息:所有证书都应在 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

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

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

【问题讨论】:

  • 如果是关于相互身份验证,也许您可​​以更改您的问题标题以显示这一点并获得比谈论 FatturaPA 更多的关注
  • 谢谢,是正确的。没有考虑过。不存在此服务的详细文档(是电子账单的州服务)。
  • 请把时间倒流一点,问问自己在收到证书之前做了什么。如果不准备证书请求,您将无法收到此类请求,在此过程中您已经生成了私钥。你只是忘记了把钥匙放在哪里,可能你需要重新做一遍。
  • @LexLi 我还没有创建证书。我从“国家”收到了没有私钥的证书。此 Web 服务是一项现有服务,我应该“仅”将我连接到此服务。
  • @Elro 那是不可能的。您需要联系管理服务的人员,询问如何找到私钥。

标签: c# wcf ssl ssl-certificate


【解决方案1】:

不,您不能在没有私钥的情况下使用证书进行身份验证。

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

您拥有的是公钥。使用您的 私钥 签名是证明您“拥有”公钥以及您是如何通过身份验证的。

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

【讨论】:

    猜你喜欢
    • 2010-12-06
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    相关资源
    最近更新 更多