【问题标题】:Use custom security provider with JDK11's jarsigner将自定义安全提供程序与 JDK11 的 jarsigner 一起使用
【发布时间】:2019-05-13 16:08:43
【问题描述】:

我正在尝试将自定义安全提供程序与 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 的一部分,我可以通过以下方式修复 JRE:1)将 Luna 的 JAR 和 DLL 放在 \lib\ext 目录中,并通过在其中添加提供程序来调整 java.security 文件。不幸的是,jarsigner 只是 JDK 的一部分,我在 JDK 中找不到 \lib\ext 文件夹,也没有找到 java.security 文件。

【问题讨论】:

  • 您在寻找 -J-classpath 吗?
  • 使用-J-classpath后,工具提示“-classpath 选项不存在。”
  • 你试过 -J-cp 和 -provider 吗?前者在类路径中包含jar,后者添加提供者,然后 KeyStore.getInstance("LUNA") 应该可以工作吗?顺便说一句,您是否可以在自己的程序中运行它,并在类路径上添加 jar 并添加提供程序?
  • 是的,对于我的所有测试,我都使用了“-provider”——但如果你是这个意思,我没有使用“-J-provider”。

标签: java security


【解决方案1】:

我找到了解决方案。不要使用 -provider 标志,而是在 java.security 文件中安全提供程序的开头添加 com.safenet.luna.provider.LunaProvider(顺序在这里非常重要)。然后是命令

jarsigner -keystore <path to keystore> -storetype Luna -tsa http://timestamp.digicert.com <path to jar> <key label> -certchain <path to certchain> -J-cp -J<path to LunaProvider.jar>

应该可以。

【讨论】:

    【解决方案2】:

    尝试将以下内容传递给 jarsigner

    -J-cp -J<path to LunaProvider.jar>
    

    【讨论】:

    • 感谢您的贡献,不过我已经尝试过了,请参阅我的问题 :-)
    • 嗨,我从你的问题中认为你只尝试了 -J-cp 选项。本周我遇到了同样的问题,我的回答为我解决了。
    猜你喜欢
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多