使用硬件令牌加速jarsigner?

4
我曾经使用本地安装的密钥库作为自动构建的一部分来签署jar文件。由于近期关于最低代码签名要求的变更,我现在必须使用基于硬件的设备,虽然我已经知道如何操作,但我遇到了极慢的速度问题。
举个例子,一个含有180个类的jar文件,我以前只需要大约半秒钟就能签名完成,但现在需要花费大约30秒左右的时间。在这个过程中,我看到我的令牌设备的访问指示灯每秒闪烁几次,可能是因为每个类都需要访问一次。
是否有任何方法可以加快速度,例如某种方式将令牌访问量减少到整个jar文件的单次访问?

由于签名实际上是在处理能力非常低的 e-Token 中进行的,所以您可能无法做任何事情。如果您的密钥可以导出,您可以将其导出为 PKCS#12 pfx 文件并用于签名。 - ares
@ares 谢谢。唉,我的密钥无法导出。显然这是微软现在要求的一部分。 - Andy Lowry
2个回答

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。

谢谢你的建议。我的令牌确实有日志记录功能,但需要管理员权限,而我没有这个权限。感谢你的指点,我会去看看。 - Andy Lowry
正如你所说,你的回答并不是真正的答案,但看起来这可能是我现在能得到的最接近的答案了,所以暂时我会给你答案的信用。谢谢! - Andy Lowry
我不知道jarsigner许可证是什么。但是也许,如果许可证允许您这样做,您可以修改jarsigner源代码,使用jarsigner命令行参数中的加密提供程序来创建软件摘要(始终是软件)和签名。 - Egl
在 https://stackoverflow.com/questions/44761149/wrapper-pkcs11-functions-passing-arguments-and-get-return-values 的评论中,@vlp 提到了两个记录 pkcs11 库的工具。 - Egl

1
尝试将-sigalg SHA512withRSA添加到您的jarsigner选项中。
如需更多信息,请查看我对相关问题的答案

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接