为什么这个X.509证书被认为是无效的?
问题描述:
我有一个给定的证书安装在我的服务器上。该证书具有有效日期,并且在Windows证书MMC管理单元中似乎完全有效。为什么这个X.509证书被认为是无效的?
但是,当我尝试读取证书时,为了在HttpRequest中使用它,我无法找到它。以下是使用的代码:
X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly); X509Certificate2Collection col =
store.Certificates.Find(X509FindType.FindBySerialNumber, "xxx", true);
xxx
是序列号;参数true
的意思是“只有有效的证书”。返回的集合是空的。
奇怪的是,如果我通过false
,表示无效证书可以接受,则集合包含一个具有指定序列号的元素—。
结论:证书似乎有效,但Find
方法将其视为无效!为什么?
答
尝试使用X509Chain类验证证书链。这可以准确地告诉你为什么证书不被视为有效。
正如erickson所建议的,您的X509Store可能没有来自链中CA的可信证书。如果您使用OpenSSL或其他工具来生成自己的自签名CA,则需要将该CA的公共证书添加到X509Store。
答
我相信x509证书绑定到特定的用户。它可能是无效的,因为在代码中,您以不同的用户身份访问它,而不是它创建的用户?
答
发行人证书是否存在于X509Store中?证书只有在您信任的人签名后才有效。
这是来自真实CA的证书,还是您自己签署的证书?开发人员经常使用的证书签名工具,如OpenSSL,默认情况下不会添加一些重要的扩展。
链证书存在,但不知何故无法访问此用户。我使用MSDN的示例代码来检查链状态:http://tinyurl.com/4wfnng。此代码根据用户重新设置不同的状态。我将尝试重新安装证书。谢谢。 – pvieira 2008-09-19 09:40:56