【问题标题】:Implementing Digital Signing in a Java Applet在 Java Applet 中实现数字签名
【发布时间】:2013-08-06 05:25:17
【问题描述】:

我正在尝试使用 Java Applet 在基于 Web 的应用程序中签署一些数据(POST 表单)。用户的 x509 证书将位于加密货币/智能卡中。签名必须是附加的 pkcs#7 格式。

我使用本教程/代码作为构建小程序的起点 - http://www.developer.com/java/other/article.php/3587361/Java-Applet-for-Signing-with-a-Smart-Card.htm

对我来说最大的问题似乎是小程序要求用户提供 pkcs#11 实现库的位置。这对我来说是一个很大的禁忌,因为我的典型用户不会知道他的 pkcs#11 库的位置。

来自 Oracle 的 Java 文档 - http://docs.oracle.com/javase/6/docs/technotes/guides/security/p11guide.html 似乎 Java 没有自带实现。

有没有一种方法可以在不询问用户此位置的情况下进行此签名。我可以接受仅适用于 Windows 上的 IE 和 Firefox 的解决方案。

通过我使用过的一些智能卡/加密货币,我注意到插入它的那一刻,我可以在 IE 和 Firefox 的个人证书选项卡中看到证书。这可能意味着加密令牌在您插入卡时向操作系统注册它包含的所有证书,并在您移除卡时取消注册它。因此,当它执行此操作时,它可能必须向操作系统/浏览器公开某些接口 - 这不能用于签名吗?

【问题讨论】:

    标签: java digital-signature jce pkcs#7 pkcs#11


    【解决方案1】:

    我们在 SecureBlackox 产品的分布式密码学插件中完成了您现在尝试做的事情(使用客户端模块进行分布式签名),我们为其他浏览器的 IE 和 Java 小程序提供 ActiveX 控件。

    不幸的是,PKCS#11 DLL 没有在任何地方注册,因此您无法避免询问用户该 DLL 的位置。

    大多数硬件设备都支持 PKCS#11 和 CryptoAPI 接口。在 CryptoAPI 接口内,CSP DLL 将基于硬件的证书暴露给 CryptoAPI 引擎,从而暴露给应用程序。在这种情况下,您可以使用适用于 Windows CryptoAPI 的 Java 类。

    PKCS#11 是一个接口,由硬件供应商实现,因此 Java 无法实现它自己的 - JVM 不是硬件并且不包含证书(即使它包含,也无法解决您的问题)。我需要注意的是,Firefox 具有内置的 PKCS#11 驱动程序,Firefox 通过该驱动程序访问自己的证书。这样做是为了统一支持软件和硬件存储的证书。

    【讨论】:

    • In this case you can use Java classes that work with Windows CryptoAPI.你能详细说明一下 - 这些是哪些类?
    • @user93353 请搜索“sunMSCAPI” - 这就是您需要的。我对 Java 内部的了解不够,无法为您提供有关实现的详细信息。
    • 顺便说一句,也许你会发现上面提到的附加组件很有用,而不是自己花时间。你可以在eldos.com/sbb/desc-dc.php查看它
    猜你喜欢
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    相关资源
    最近更新 更多