使用硬件令牌加速 jarsigner?

Speed up jarsigner with hardware token?

我以前使用本地安装的密钥库签署 jar 文件作为自动构建的一部分。由于最近对最小代码签名要求的更改,我现在不得不使用基于硬件的设备,虽然我已经想出如何去做,但我发现速度极慢。

举个例子,一个 180 classes 的 jar 文件,我以前可以在大约半秒内登录,现在需要大约 30 秒。随着它的进行,我看到我的令牌设备的访问指示灯每秒闪烁几次,大概是 jar 文件中的每个 class。

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

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

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

您的 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。

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

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