我正在尝试使用JDK 11的自定义安全提供程序
jarsigner
应用程序。我使用以下命令:
jarsigner -verbose -keystore C:\foo\bar\mykeystore -storetype Luna -tsa http://timestamp.digicert.com C:\foo\bar\sample.jar "mykeyalias" -provider com.safenetinc.luna.provider.LunaProvider
但是,我收到以下错误输出:
jarsigner error: java.lang.Exception: Provider "com.safenetinc.luna.provider.LunaProvider" not found
我找到了
Using custom PKCS11 provider with jarsigner
尝试使用
-J-cp
但是我得到了错误:
jarsigner error: java.lang.RuntimeException: unable to instantiate keystore class: LUNA not found
使用建议的
-J-Djava.ext.dirs=C:\foo\bar\LunaProvider.jar
也不起作用,失败原因如下:
-Djava.ext.dirs=C:\foo\bar\LunaProvider.jar is not supported. Use -classpath instead.
选项-classpath不存在,但它可能引用了-cp,我已经尝试过了(见上文)。
如何正确地做到这一点?
注意:keytool也是jre的一部分,我可以通过1)将jar和luna的dll放在\lib\ext目录中来修复jre,并通过在其中添加提供程序来调整java.security文件。不幸的是,jarsigner只是JDK的一部分,在JDK中找不到\lib\ext文件夹,也找不到java.security文件。