证书适用于我在localhost上的开发机器。
调用ASMX Web服务时,我的客户端证书在Web服务的接收端为空。事先通过其指纹找到客户端证书并成功添加到请求中。
X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindByThumbprint, _CertificateThumbprint,true);
因此我通过X509Chain.ChainElements调用了verify方法,它返回false,我可以调试,我看到RevocationStatusUnknown的状态。
然后我尝试通过下面的代码构建其链策略,但接收端仍然缺少证书。
X509Chain ch = new X509Chain();
X509Chain chain = new X509Chain();
X509ChainPolicy chainPolicy = new X509ChainPolicy()
{
RevocationMode = X509RevocationMode.NoCheck,
RevocationFlag = X509RevocationFlag.EntireChain,
VerificationFlags = X509VerificationFlags.NoFlag
};
chain.ChainPolicy = chainPolicy;
chain.Build(certs[0]);
在认证文件本身上,我在命令行中运行以下命令..
certutil -f -urlfetch -verify SWIMTRAM.cer
我收到以下信息..
Element.dwInfoStatus = CERT_TRUST_HAS_EXACT_MATCH_ISSUER (0x1)
Element.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)
Element.dwErrorStatus = CERT_TRUST_REVOCATION_STATUS_UNKNOWN (0x40)
Cannot check leaf certificate revocation status
CERT_TRUST_REVOCATION_STATUS_UNKNOWN
注意: 我尝试通过fiddler调试请求,fiddler2应用程序本身提示我将证书保存到C:\ Users \\ Documents \ Fiddler2。 执行此操作后,服务现在可以通过Web浏览器工作,但仅在fiddler2运行时才能运行。