【问题标题】:Certificates store windows 10 C#证书存储 Windows 10 C#
【发布时间】:2015-11-10 08:12:49
【问题描述】:

我问这个是因为我很绝望,我在任何地方都找不到任何谈论这个问题的帖子。

在我的 WinForms C# 应用程序中,我使用以下代码检索 Windows 证书:

X509Certificate2Collection Certificates = new X509Certificate2Collection();

X509Store store = new X509Store(StoreName.My);
store.Open(OpenFlags.ReadOnly);

//Filtering the list, showing only not-expired ones
Certificates = store.Certificates.Find(X509FindType.FindByTimeValid, DateTime.Now, false);
store.Close();

这在每个 Windows 版本(从 Windows XP 到 Windows 8.1)上都很有效。在 Windows 10 中,它可以在第一次尝试时运行。如果我再做一次,它就会卡住等待。

我尝试实现一个 60 秒的“超时计时器”:提供的代码段刚刚超时。

如果用户从 PC 中取出包含证书的 USB 密钥(或智能卡)并重新插入,问题就解决了。

有人对此行为有解决方案吗?我很绝望,升级到 Windows 10 的客户对我很生气,我不知道该怎么办。

【问题讨论】:

  • 您的智能卡与 Windows 10 兼容吗?
  • 当然可以,否则第一次就不行了!我第一次使用该代码时,我获得了证书,选择一个并使用它对文件进行数字签名或验证所有者。没问题。但是我第二次运行该代码时,我只是永远等待。仅在 Win10 上。
  • 不同的智能卡会发生这种情况吗?你用的是什么智能卡?这可能是智能卡中间件的故障。
  • "当然可以,否则第一次就不行了!"它什么也没说。该卡可能(有时)有效,但未经供应商测试,因此不支持此方案。我们在使用 eToken Pro 令牌时遇到了各种问题,它们在现代操作系统版本的某些情况下会失败。支持人员表示此操作系统尚不支持,并通过特殊补丁获得支持以解决较新操作系统中的这些问题。
  • @FabioLamberti 尝试启用智能卡中间件的日志记录。也许会有一些对你有帮助的东西。您还可以启用 CAPI2 事件日志(事件查看器->windows 日志->应用程序和服务->microsoft->windows->CAPI2)。

标签: c# certificate windows-10 x509certificate certificate-store


【解决方案1】:

我终于找到了解决这个 Windows 10 错误的方法。它实际上是一种“解决方法”,但 100% 有效并且不会导致任何问题。

解决方法是在您的应用程序中创建一个“全局”X509Store 存储,并且永远不要关闭它。您只需在第一次需要时打开(或在您的应用启动时),从不调用“store.Close();”

您可以在应用程序的所有会话期间调用 store.Certificates.Find(....),如果您关闭商店并重新打开,它将永远不会显示发生的问题。 也许不是一个漂亮的解决方案,但可以 100% 工作。 我希望这会帮助像我一样发现这个该死的 win10 错误的人。

【讨论】:

    猜你喜欢
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 2011-11-09
    • 2023-04-06
    • 2013-05-27
    • 2016-03-13
    • 2021-03-21
    相关资源
    最近更新 更多