在c#中使用WCF加载证书以对SOAP信封签名

本文关键字:SOAP 证书 加载 WCF | 更新日期: 2023-09-27 17:50:51

我尝试加载一个x509证书以便在WCF客户机中使用。对于这个,我使用SetDefaultCertificate函数,但是这个函数抛出一个异常。

var clientWS = new WS_eFacturaSoapPortClient();
clientWS.ClientCredentials.ServiceCertificate.SetDefaultCertificate(
    StoreLocation.CurrentUser, StoreName.My, 
    X509FindType.FindBySubjectKeyIdentifier, "79852b4fab95e8cd1f6e36167bbb895bd4cbe767");

例外:

使用以下搜索条件无法找到X.509证书:
StoreName 'My', StoreLocation 'CurrentUser', FindType
FindBySubjectKeyIdentifier, FindValue
"79852 b4fab95e8cd1f6e36167bbb895bd4cbe767"。

但是如果我这样做…

X509Certificate2 cert = null;
X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
try
{
    store.Open(OpenFlags.ReadOnly);
    X509Certificate2Collection col = store.Certificates.Find(
        X509FindType.FindBySubjectKeyIdentifier, "79852b4fab95e8cd1f6e36167bbb895bd4cbe767", true);
    cert = col[0];
}
//  Cerrar el store
finally { store.Close(); }

创建证书。

我做错了什么?是否可以将x509Certificate2添加到ClientCredentials?

在c#中使用WCF加载证书以对SOAP信封签名

我把FindType改为FindBySerialNumber,它工作了。

clientWS.ClientCredentials.ServiceCertificate.SetDefaultCertificate(
    StoreLocation.CurrentUser, StoreName.My, 
    X509FindType.FindBySerialNumber, "0cf43655217b8853e2df0b931d2c352afa93d9");