我之前使用本地安装的密钥库签署了jar文件,作为自动构建的一部分。我现在面临着必须使用基于硬件的设备,由于最近对最小代码签名要求的改变,并且虽然我已经想出如何做到这一点,但我看到了极端的减速。
就像一个例子,一个包含180个类的jar文件,我以前可以签约大约半秒钟,现在大约需要30秒。随着时间的推移,我看到令牌设备的访问指示灯每秒闪烁几次,大概是jar文件中每个类一次。
有没有办法加快速度,例如某种方法可以减少对整个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):
Signature signature = Signature.getInstance("SHA1withRSA", "SunPKCS11")
等。并且模拟KeyStoreSpi。然后使用您的提供者作为参数调用jarsigner。
尝试将-sigalg SHA512withRSA添加到您的jarsigner选项中。
有关详细信息,请查看我的answer相关问题