pkcs11 异常解析配置: Unexpected value Token['(']

pkcs11 exception parsing configuration: Unexpected value Token['(']

我知道这不是一个新问题(参见 https://bugs.openjdk.java.net/browse/JDK-8023745 ),但我希望有人能提供一个好的解决方法,我们可以推出。

我们正在部署一个使用 pkcs11 的应用程序,在解析位于 "Program Files (x86)" 的配置时遇到问题。我们得到的是:

sun.security.pkcs11.ConfigurationException: 意外值 Token['('], 第 2 行

在开发环境中,将位置移动到 "clean" 路径即可解决问题,因此问题肯定是 (x86)。

什么是好的解决方法,希望对最终用户造成的麻烦最少?

所以最好的解决方案是将文件复制到另一个位置,使用 "valid" 路径,使用 FileUtils.copyFileToDirectory(),从 org.apache.commons.io.FileUtils .

我在 Windows 中找到了解决此问题的简单方法。在我的例子中,我试图从 Mozilla 32 位安装目录加载 nss 本机库。如果我这样配置路径:

name = NSS
library = C:\Program Files (x86)\Mozilla Firefox\softokn3.dll

我收到 Unexpected value Token['('] 异常。相反,如果我尝试添加 " 来包含库路径:

name = NSS
library = "C:\Program Files (x86)\Mozilla Firefox\softokn3.dll"

然后错误发生变化,我得到:

Caused by: sun.security.pkcs11.ConfigurationException: Absolute path required for library value: C:Program Files (x86)Mozilla Firefoxsoftokn3.dll

似乎 " 绕过了括号问题,但似乎 file.separator 丢失了,所以我最后一次尝试使用 " 和 "escaping" file.separator(在放入配置之前简单地将 replace("\","\\") 应用到路径):

name = NSS
library = "C:\Program Files (x86)\Mozilla Firefox\softokn3.dll"

这样就可以正确加载库了。我测试了 java 8 update 141.