gpt4 book ai didi

c# - X509Certificate2Collection.Find() 方法,使用 FindByTimeValid 标准,不起作用

转载 作者:行者123 更新时间:2023-12-03 22:57:10 33 4
gpt4 key购买 nike

我使用以下代码仅获取机器上的有效(按时间)证书:

var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
var storeCol = store.Certificates;
store.Close();

var notExpiredCol = storeCol.Find(X509FindType.FindByTimeValid, DateTime.Now, true);

在我的机器上它工作得很好。但是,在另一台具有相同配置(Windows 10、Visual Studio Community 2017 并安装了完全相同的证书)的机器上,它不返回任何内容。

来自商店的原始系列,没有过滤器,有证书。如果我们查看 Internet Explorer 下的证书,证书就在那里。如果我们查看带有证书管理单元的 MMC,证书就在那里。我们尝试在当前用户和本地机器下安装证书,代码正在从当前用户获取证书集合。

我刚刚尝试使用 FindByTimeExpired FindByTimeNotYetValid 标准和相同的结果,都返回一个空集合:
var expiredCol = storeCol.Find(X509FindType.FindByTimeExpired, DateTime.Now, true);
var notYetValidCol = storeCol.Find(X509FindType.FindByTimeNotYetValid, DateTime.Now, true);

有没有人知道发生了什么或者我们可以检查什么来解决问题?

对了, 的作用到底是什么?仅有效 X509Certificate2Collection.Find() 方法上的参数?如果我在其上使用值 false,该方法将返回集合上的证书。

最佳答案

@Kirk Larkin 在他的评论中解决了这个问题。
validOnly参数设置为 true 导致 X509Certificate2Collection.Find()调用方法X509Certificate2.Verify()它找到的任何证书上的方法(只是不知道为什么文档没有提到那个小特殊性),并且该方法执行 X.509 链验证。

在该机器上,未安装证书链中的一个受信任的根证书颁发机构,因此,该证书被视为不受信任。我们已经安装了缺少的链证书,现在它运行良好。

所以,最好不要使用 validOnly在我们的案例中,参数设置为 true。

关于c# - X509Certificate2Collection.Find() 方法,使用 FindByTimeValid 标准,不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45622283/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com