使用带有 JDK11 的 jarsigner 的自定义安全提供程序

我正在尝试将自定义安全提供程序与 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 目录中并通过在那里添加提供程序来调整 java.security 文件来修复 JRE。不幸的是,jarsigner 只是 JDK 的一部分,我在 JDK 中找不到 \lib\ext 文件夹,也找不到 java.security 文件。


FFIVE
浏览 296回答 2
2回答

莫回无

我找到了解决办法。不要使用 -provider 标志,而是在 java.security 文件中的安全提供程序的开头添加 com.safenet.luna.provider.LunaProvider(这里的顺序非常重要)。然后命令jarsigner&nbsp;-keystore&nbsp;<path&nbsp;to&nbsp;keystore>&nbsp;-storetype&nbsp;Luna&nbsp;-tsa&nbsp;http://timestamp.digicert.com&nbsp;<path&nbsp;to&nbsp;jar>&nbsp;<key&nbsp;label>&nbsp;-certchain&nbsp;<path&nbsp;to&nbsp;certchain>&nbsp;-J-cp&nbsp;-J<path&nbsp;to&nbsp;LunaProvider.jar>应该管用。

汪汪一只猫

尝试将以下内容传递给 jarsigner-J-cp&nbsp;-J<path&nbsp;to&nbsp;LunaProvider.jar>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java