使用硬件令牌加速jarsigner?

时间:2017-04-28 16:37:09

标签: java pkcs#11 jarsigner

我之前使用本地安装的密钥库签署了jar文件,作为自动构建的一部分。我现在面临着必须使用基于硬件的设备,由于最近对最小代码签名要求的更改,并且虽然我已经想出如何做到这一点,但我看到极度放缓。

就像一个例子,一个包含180个类的jar文件,我以前可以签约大约半秒钟,现在大约需要30秒。随着时间的推移,我看到我的令牌设备的访问指示灯每秒闪烁几次,大概一次就是jar文件中的每个类。

有没有办法加快速度,例如某种方法可以减少对整个jar文件的单一访问的令牌访问?

2 个答案:

答案 0 :(得分:3)

这不是一个答案,但评论太长了:

如果您对任何文件的令牌访问权限的假设是正确的,那么这意味着文件的哈希值也会在设备中计算,而不仅仅是签名。

您的PKCS11设备是否有一个日志选项,可以显示哪些pkcs11调用是设备接收(哈希操作在PKCS11中称为C_Digest)来确认? 也许使用java keytool with opensc pkcs#11 provider only works with debug option enabled中提到的选项(我还没试过)

由于我不知道是否有任何方法可以告诉jarsigner通过软件进行哈希并通过硬件进行签名,如果你找不到更好的答案,也许你可以自己编写提供者:(http://docs.oracle.com/javase/7/docs/technotes/guides/security/crypto/HowToImplAProvider.html):

  • 实现软件哈希(MessageDigestSpi,只是将调用转发给默认的软件java提供程序)
  • 和设备签名(SignatureSpi,只是将调用转发给在java中配置的PKCS11提供程序)。我认为它是Signature signature = Signature.getInstance("SHA1withRSA", "SunPKCS11")等等。并且模拟KeyStoreSpi。

然后将您的提供者作为参数调用jarsigner。

答案 1 :(得分:1)

尝试将-sigalg SHA512withRSA添加到jarsigner选项中。

有关更多信息,请检查我的answer相关问题