我的服务器上安装了给定的证书。该证书具有有效日期,并且在Windows证书MMC管理单元中似乎完全有效。
但是,当我尝试读取证书时,为了在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
方法将其视为无效!为什么呢?
答案 0 :(得分:7)
尝试使用X509Chain类验证证书链。这可以告诉您证书为何无效。
正如erickson建议的那样,您的X509Store可能没有来自链中CA的可信证书。如果您使用OpenSSL或其他工具生成自己的自签名CA,则需要将该CA的公共证书添加到X509Store。
答案 1 :(得分:5)
发行人的证书是否存在于X509商店中?证书仅在您信任的人签名时才有效。
这是来自真实CA的证书,还是您自己签署的证书?开发人员经常使用的证书签名工具(如OpenSSL)默认情况下不会添加一些重要的扩展名。
答案 2 :(得分:2)
我相信x509证书与特定用户有关。它是否无效,因为在代码中您以不同于创建它的用户的身份访问它?