我的WCF(客户端)证书有问题。
我收到了三张证书:
注意:没有证书具有私钥
在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
如果我创建一个新密钥=>它不起作用(没有证书与私钥匹配)
是否可以使用没有私钥的证书?
答案 0 :(得分:0)
不,如果没有私钥,您就无法使用证书进行身份验证。
基于X.509的身份验证机制的安全性依赖于公钥加密,其中生成公钥和私钥。只有私人部分应该保密。
你拥有的是公钥。使用您的私人键进行签名即可证明您拥有'公钥,以及如何进行身份验证。
另请注意:您不能简单地为公钥生成新的私钥。钥匙是一对。