Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用sun.security.pkcs11.SunPKCS11时出现奇怪的问题:找不到指定的过程?_Java_Security_Firefox_Applet - Fatal编程技术网

Java 使用sun.security.pkcs11.SunPKCS11时出现奇怪的问题:找不到指定的过程?

Java 使用sun.security.pkcs11.SunPKCS11时出现奇怪的问题:找不到指定的过程?,java,security,firefox,applet,Java,Security,Firefox,Applet,我正在开发这个应用程序,专门用于Firefox(供内部使用)。基本上,我们使用sun.security来读取Firefox的密钥库,并使用我们获得的证书对数据进行签名 我已经在几台机器上测试过,结果各不相同,我似乎无法找出原因 我已经在最新的ubuntu版本Firefox 3.6.13上测试了它,使用Java版本1.6.0_22,它在那里工作。我还有一台Windows XP笔记本电脑,它的Firefox版本与Java版本1.6.0_17相同,在那里也可以使用 还有另外两台Windows XP笔记

我正在开发这个应用程序,专门用于Firefox(供内部使用)。基本上,我们使用sun.security来读取Firefox的密钥库,并使用我们获得的证书对数据进行签名

我已经在几台机器上测试过,结果各不相同,我似乎无法找出原因

我已经在最新的ubuntu版本Firefox 3.6.13上测试了它,使用Java版本1.6.0_22,它在那里工作。我还有一台Windows XP笔记本电脑,它的Firefox版本与Java版本1.6.0_17相同,在那里也可以使用

还有另外两台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

我希望有人能提供一些线索,或者一些关于进一步调试的提示。我在这里不知所措。

我可能太晚了,无法使用它,但我遇到了类似的问题,在我的路径中添加
dist\WINXXX_DBG.OBJ\lib
解决了这个问题。

快速回答:使用x86 jdk而不是带有NSS和JSS的x64 jdk

针对NSS证书数据库的快速测试:

keytool-list-v-storetype pkcs11-providerClass sun.security.pkcs11.SunPKCS11-providerArg NSS\u CONFIG\u FIPS

其中NSS_CONFIG_FIPS是指向NSS数据库的配置文件的路径。如果是JDK问题,此命令将失败,堆栈跟踪与提问者错误匹配;如果JDK配置正确(并且配置文件正确),则此命令将成功

请注意,我的堆栈跟踪包含以下消息:

原因:java.io.IOException:%1不是有效的Win32应用程序

我在NSS DLL上运行了dumpbin/headers,发现Mozilla构建的二进制文件都是32位的。我安装了x86 jdk,并将JAVA_重新导入主页。一切都开始起作用了

Vivek认为,NSS及其附带的可执行文件对库的存在非常敏感。确保路径上存在所有.dll、.lib和.chk文件。特别是,如果没有chk文件,modutil.exe将使某些命令失败,并且错误消息没有帮助。您的NSS lib文件夹需要包括NSS和NSPR lib文件夹、jss4.dll和jss4.lib文件以及jss4.jar

另外请注意,如果您自己构建NSS,库将不会使用批准的代码签名证书进行签名,这将导致JCA出现问题

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