9

我的服务器上安装了给定的证书。该证书具有有效日期,并且在 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方法将其视为无效!为什么?

4

3 回答 3

8

尝试使用X509Chain类验证证书链。这可以准确地告诉您为什么证书不被认为是有效的。

As erickson suggested, your X509Store may not have the trusted certificate from the CA in the chain. If you used OpenSSL or another tool to generate your own self-signed CA, you need to add the public certificate for that CA to the X509Store.

于 2008-09-19T00:45:01.980 回答
6

X509Store 中是否存在颁发者的证书?证书只有在您信任的人签名时才有效。

这是来自真实 CA 的证书,还是您自己签署的证书?开发人员经常使用的证书签名工具,如 OpenSSL,默认不添加一些重要的扩展。

于 2008-09-19T00:16:09.707 回答
3

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

于 2008-09-19T00:05:08.830 回答