java - 使用 keytool 找不到 SunPKCS11 提供程序

标签 java keytool java-9 pkcs#11 java-security

我正在使用 java 9 运行以下命令:

keytool -keystore NONE -storetype PKCS11 -providerClass
     sun.security.pkcs11.SunPKCS11 -providerArg pkcs11conf -list


并得到流动错误:

keytool error: java.lang.Exception: Provider "sun.security.pkcs11.SunPKCS11" not found



在 Java 8 中它可以工作。

如何将 keytool 与 SunPKCS11 提供程序一起使用?

最佳答案

问题出在我的 pkcs11conf 文件上。 Java 不喜欢我的 DLL 路径中的单个反斜杠:

"C:\Path\to\my\pkcs11lib\mypkcs11lib.dll" : Wrong

"C:\\Path\\to\my\\pkcs11lib\\mypkcs11lib.dll" : OK


Java 8 和 Java 9 之间的区别在于错误消息。
java 9:
keytool error: java.lang.Exception: Provider "sun.security.pkcs11.SunPKCS11" not found
java 8:
keytool error: java.lang.reflect.InvocationTargetException
我意识到当我添加 时-v 到命令。
java 9:
java.lang.Exception: Provider "sun.security.pkcs11.SunPKCS11" not found
        at java.base/sun.security.tools.keytool.Main.doCommands(Main.java:798)
        at java.base/sun.security.tools.keytool.Main.run(Main.java:397)
        at java.base/sun.security.tools.keytool.Main.main(Main.java:390)
Caused by: sun.security.pkcs11.ConfigurationException: Absolute path required for library value: xxx.dll
        at jdk.crypto.cryptoki/sun.security.pkcs11.Config.parseLibrary(Config.java:682)
        at jdk.crypto.cryptoki/sun.security.pkcs11.Config.parse(Config.java:392)
        at jdk.crypto.cryptoki/sun.security.pkcs11.Config.<init>(Config.java:210)
        at jdk.crypto.cryptoki/sun.security.pkcs11.SunPKCS11$1.run(SunPKCS11.java:113)
        at jdk.crypto.cryptoki/sun.security.pkcs11.SunPKCS11$1.run(SunPKCS11.java:110)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at jdk.crypto.cryptoki/sun.security.pkcs11.SunPKCS11.configure(SunPKCS11.java:110)
        at java.base/sun.security.tools.KeyStoreUtil.loadProviderByName(KeyStoreUtil.java:285)
        at java.base/sun.security.tools.KeyStoreUtil.loadProviderByClass(KeyStoreUtil.java:309)
        at java.base/sun.security.tools.keytool.Main.doCommands(Main.java:788)
        ... 2 more
java 8:
java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at sun.security.tools.keytool.Main.doCommands(Unknown Source)
        at sun.security.tools.keytool.Main.run(Unknown Source)
        at sun.security.tools.keytool.Main.main(Unknown Source)
Caused by: java.security.ProviderException: Error parsing configuration
        at sun.security.pkcs11.Config.getConfig(Config.java:88)
        at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:129)
        at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:103)
        ... 7 more
Caused by: sun.security.pkcs11.ConfigurationException: Absolute path required for library value: xxx.dll
        at sun.security.pkcs11.Config.parseLibrary(Config.java:690)
        at sun.security.pkcs11.Config.parse(Config.java:398)
        at sun.security.pkcs11.Config.<init>(Config.java:220)

关于java - 使用 keytool 找不到 SunPKCS11 提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47412758/

相关文章:

java - Java 中是否有与 Python 的 exec() 函数等效的函数?

java - Spring 3.0.5 和 Hibernate 3.5.3 - 包引用错误?

ssl - 骡子 ESB 3.2.x : HTTPS Transport bad_certificate error?

java - 无法为 Java 应用程序安装 SSL 证书

java - 为什么 G1 是 Java 9 的默认垃圾收集器?

java - 如何制作包含多个类的 .jar 文件?

java - 如何用 .在 java 字符串中

android - Apk 签名者条目不包含 key

java - 如何使用 Java 9 模块中的资源

java - 对 Java 9 的 Hibernate 支持