【问题标题】:Using custom PKCS11 provider with jarsigner使用带有 jarsigner 的自定义 PKCS11 提供程序
【发布时间】:2016-11-21 20:31:05
【问题描述】:

我编写了一个自定义 PKCS11 提供程序,现在我想通过 jarsigner 使用它。

我的命令:

jarsigner -verbose -keystore NONE -storetype PKCS11 -providerClass my.provider.class jar_to_sign_on.jar "key_name"

我收到以下错误:

jarsigner error: java.lang.ClassNotFoundException: my.provider.class

这是因为 jarsinger 找不到我的提供程序 .jar 实现。

当我将 mt .jar 放入 ...\Java\jdk1.8.0_31\jre\lib\ext 时,它可以完美运行。

我的问题是:有办法动态设置我的提供者 .jar 吗? (如keytool中的-providerPath)

【问题讨论】:

    标签: java keytool pkcs#11 jarsigner


    【解决方案1】:

    jarsigner-J 选项,允许将其值传递给支持的java 进程。问题是它不允许空格,所以你需要两个这样的选项来传递一个类路径。像这样的东西应该可以工作:

    jarsigner ... -J-cp -Jmylib.jar

    【讨论】:

    • 嗨,10 倍。我得到:错误:找不到或加载主类 cp
    • 抱歉,正确的版本应该是jarsigner ... -J-cp -Jmylib.jar,以便让java 命令知道cp 是一个选项,而不是类名。
    • 很好:现在我得到以下信息:错误:无法找到或加载主类 sun.security.tools.jarsigner.Main
    • 至少该选项有效。不幸的是,它覆盖了 jarsigner 传递给 java 的选项,但这可以修复。你用什么JDK?我认为您需要将 JDK 的tools.jar 的路径添加到包含缺少的类的-Jmylib.jar。在我的系统上是-Jmylib.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0/Contents/Home/lib/tools.jar
    • 我找到了一个合理的解决方案:我添加了 -J-Djava.ext.dirs=my_jar_lib 并且它有效。缺点是我需要从 ...\Java\jdk1.8.0_31\jre\lib\ext 复制一个 jar 到我的 .jar 文件夹。
    【解决方案2】:

    Java classpath 允许指定多个用':'分隔的jar 文件。在这种情况下,您可以使用

    -J-cp -J./mylib.jar:tools.jar

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 2012-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多