如何使用Java从操作系统加载数字证书?

如何使用Java从操作系统加载数字证书?,java,ssl,Java,Ssl,我已经为数字签名解决方案工作了一段时间,一切都很好,但现在我们的客户想要通过数字证书登录解决方案 他展示了他使用的另一个门户网站的一个示例,当在登录页面上选择digital certificate(数字证书)选项时,它会执行一个jnlp,列出所有安装的Windows证书 我相信jnlp会发送一些在客户端后台运行的“桌面”模块来检索证书列表,然后将其发送回服务器 我发现SunMSCAPI的一些功能正是我所需要的,并尝试加载它,但总是出现异常 KeyStore ks = KeyStore.getIn

我已经为数字签名解决方案工作了一段时间,一切都很好,但现在我们的客户想要通过数字证书登录解决方案

他展示了他使用的另一个门户网站的一个示例,当在登录页面上选择digital certificate(数字证书)选项时,它会执行一个jnlp,列出所有安装的Windows证书

我相信jnlp会发送一些在客户端后台运行的“桌面”模块来检索证书列表,然后将其发送回服务器

我发现SunMSCAPI的一些功能正是我所需要的,并尝试加载它,但总是出现异常

KeyStore ks = KeyStore.getInstance("Windows-ROOT", "SunMSCAPI"); 

结果

Exception in thread "main" java.security.NoSuchProviderException: SunMSCAPI
at java.security.KeyStore.getInstance(KeyStore.java:118)
我读过一些关于SunMSCAPI仅在Java6或更低版本和32位OS/JRE上工作的文章

我在这里迷路了。我的意思是,我无法预测用户在他们的站点上有什么Java版本。另外,今天很有可能成为x64系统。当然,它可能是一个Unix系统,而不是Windows系统


攻击it的最佳方法是什么?

如何:KeyStore ks=KeyStore.getInstance(“Windows根目录”)而不是KeyStore ks=KeyStore.getInstance(“SunMSCAPI”)?谢谢您的回复!不幸的是,我在线程“main”java.security.KeyStoreException中得到了相同的结果异常:在java.security.KeyStore.getInstance(KeyStore.java:101)中找不到KeyStore Windows根实现,请参阅
Exception in thread "main" java.security.NoSuchProviderException: SunMSCAPI
at java.security.KeyStore.getInstance(KeyStore.java:118)