我正在开发这个应用程序,特别用于Firefox(这是内部使用)。基本上,我们使用sun.security来读取Firefox的KeyStore并使用我们获得的证书签署数据。使用sun.security.pkcs11.SunPKCS11的奇怪问题:无法找到指定的程序?
我在几台机器上测试过这个,结果不一样,我似乎无法找到原因。
我已经使用Java 1.6.0_22版在最新的ubuntu发行版Firefox 3.6.13上测试过它,它在那里工作。我也有一台使用Java 1.6.0_17版本的Windows XP笔记本电脑,它的工作原理也是一样的。
还有2个其他Windows XP笔记本电脑,它不会工作,给出相同的错误。他们运行相同版本的Firefox并使用java 1.6.0_17版本。
的错误是:
java.security.ProviderException: Could not initialize NSS
at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:183)
at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:86)
at SignedMessage.SigningApplet.initializeCrypto(SigningApplet.java:327)
at SignedMessage.SigningApplet.init(SigningApplet.java:84)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: The specified procedure could not be found.
at sun.security.pkcs11.Secmod.nssLoadLibrary(Native Method)
at sun.security.pkcs11.Secmod.initialize(Secmod.java:186)
at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:179)
... 5 more
Exception: java.security.ProviderException: Could not initialize NSS
从我可以告诉它找不到本地nssLoadLibrary程序?配置文件将其指向Firefox安装目录(它可以抓取nss3.dll或libnss3.so文件)。它可以在所有PC上执行此操作,并且配置中的所有路径似乎都是有效的。
样本配置文件,它的价值:
name=NSS
nssDbMode=readOnly
nssModule=keystore
nssSecmodDirectory="C:\\Documents and Settings\\user\\Application Data\\Mozilla\\firefox\\Profiles/8bzd2qqm.default"
nssLibraryDirectory=C:\Program Files\Mozilla Firefox
我希望有人将有一个线索,或许与调试进一步得到一些提示。我在这里不知所措。