【问题标题】:windows security dialog for selecting a certificate in java用于在 java 中选择证书的 windows 安全对话框
【发布时间】:2014-04-15 09:51:14
【问题描述】:

我需要从我的 java 桌面程序中的 Windows 商店中选择一个证书。代码:

KeyStore ks = KeyStore.getInstance("Windows-MY");
...

java 是否有类似 Win Dialog 这样的“准备使用”的东西?

我使用过 C# 并且有:

X509Certificate2Collection sel = X509Certificate2UI.SelectFromCollection(certificates, null, null, X509SelectionFlag.SingleSelection);

是否有对应的 java 或者我必须从密钥库 certArray 创建自己的 dialog

【问题讨论】:

  • 你好,我正在尝试做同样的事情。你找到解决办法了吗?
  • 嗨@Seephor,我没有找到解决方案。因为当您从本地商店列出智能卡证书时,会弹出提示该卡在读卡器中:(
  • 你可以尝试调用WinAPI函数msdn.microsoft.com/ru-ru/library/windows/desktop/…
  • 这个answer 可能会给你所需要的。

标签: java dialog itext x509certificate


【解决方案1】:

这是一个已经很老的问题,但是,我在谷歌搜索完全相同的问题时发现了它(因为我也在寻找这种可能性)。我还没有找到一个工作示例,就像我假设的那样,所以我将this answer 作为一个非常罕见的基础并创建了一个示例项目,这正是我所需要的,我希望它也适合你的用例。如果没有,它至少应该为您提供一个起点,让您的用例能够发挥作用。

我已经上传了项目into my github account,它应该很简单(但是,我也评论了一些东西)并希望它可以帮助任何人,像我一样会来这个问题的人:)

它基本上使用Java Native Access library 来运行Crypt32 API 和CryptUI 库的功能,该API 应该只适用于Windows。 CryptUI 库用于向用户提示您已在问题中作为屏幕截图上传的证书提示。 Crypt32 库用于检索证书和证书存储(它默认为 Windows-MY 证书存储,但可以轻松更改)。我还努力过滤证书列表并将它们放入中间的内存/缓存证书存储中(因为这是我的用例的一部分),以过滤特定的密钥用法和扩展的密钥用法。

我的示例项目还将用户选择的证书从 CERT_CONTEXT 结构(它是本机 C 结构)转换为 java java.security.cert.X509Certificate 对象,然后可以将其放入密钥库或随心所欲。

如果有关于如何改进的建议,或者如果有我完全错过的点,我很乐意以任何方式获得评论/问题/反馈:)

【讨论】:

  • 感谢您的回答和创建回购协议。这对有同样问题的人很有用。
猜你喜欢
  • 2012-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-15
  • 2015-08-26
  • 1970-01-01
  • 2018-03-20
  • 2012-10-10
相关资源
最近更新 更多