我正在開發這個應用程序,特別用於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
我希望有人將有一個線索,或許與調試進一步得到一些提示。我在這裏不知所措。