我们有一个自定义Java小程序,可以执行某些任务,例如从本地文件系统加载PDF,使用系统KeyStore /智能卡等证书对其进行签名。这些操作在常规HTML / JavaScript中是不可能的。既然Java已被浏览器弃用,我们正在寻找替换applet功能的可能性。
有这个Web Cryptography API,但遗憾的是规范不包括使用系统密钥库。还有另一个规范,WebCrypto Key Discovery,但我不认为任何浏览器目前都支持它。
Mozilla有一个API可能正是我们需要的,但不幸的是它现在已被弃用。
所以看起来我们唯一的选择是:
还是有更好的解决方案吗?你有什么建议?我不关心解决方案是否仅适用于Internet Explorer,因为我们的大多数用户都使用。
答案 0 :(得分:2)
由于Java对浏览器的限制一般不可能使用OS本机密钥库。您仍然可以在旧版本的IE和Firefox中使用Java,但Oracle已宣布将停止浏览器的JRE插件,并且Firefox决定在2017年放弃Java支持,因此不推荐
无法编写浏览器插件,因为浏览器不允许访问多个操作系统功能。特别是Chrome插件API仅允许访问Chrome操作系统中的用户证书,而不允许访问Windows或Linux中的用户证书。对于Edge,我认为插件界面尚不可用。
有一些替代方案
使用 WebCryptographyApi 加载软件证书。请参阅How to load a PKCS#12 Digital Certificate with Javascript WebCrypto API
使用 chrome messaging api (爱沙尼亚解决方案)。请参阅https://stackoverflow.com/a/29806091/6371459
使用通过javascript连接的本地应用程序(西班牙语解决方案)请参阅https://stackoverflow.com/a/38658414/6371459
我个人测试了第一个和最后一个选项。对于爱沙尼亚解决方案,我建议与团队联系。我认为目前只支持一些智能卡
答案 1 :(得分:0)
此问题有一个新的解决方案FortifyApp,您可以了解其工作原理here。
TL; DR;它是可在OSX,Windows和Linux上运行的客户端可安装应用程序,可通过Web加密polyfill公开智能卡。