为什么将此X.509证书视为无效?

时间:2020-03-06 14:24:03  来源:igfitidea点击:

我的服务器上安装了给定的证书。该证书具有有效日期,并且在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",表示可接受无效证书,则该集合包含一个元素,即具有指定序列号的证书。

结论:证书看似有效,但是"查找"方法将其视为无效!为什么?

解决方案

我相信x509证书与特定用户相关。它是否无效,因为我们在代码中以与创建它的用户不同的用户身份访问它?

X509Store中是否存在颁发者的证书?证书只有在我们信任的人签名的情况下才有效。

这是来自真实CA的证书,还是我们自己签名的证书?默认情况下,开发人员经常使用的证书签名工具(例如OpenSSL)不会添加一些重要的扩展。

尝试使用X509Chain类验证证书链。这可以确切地告诉我们为什么证书被认为无效。

正如埃里克森建议的那样,X509Store可能没有链中CA的受信任证书。如果使用OpenSSL或者其他工具生成自己的自签名CA,则需要将该CA的公共证书添加到X509Store。