Странная проблема с использованием sun.security.pkcs11.SunPKCS11: указанная процедура не найдена? - PullRequest
2 голосов
/ 14 января 2011

Я разрабатываю это приложение для специального использования с Firefox (для внутреннего использования). По сути, мы используем материал sun.security для чтения хранилища ключей Firefox и подписывания данных с помощью сертификатов, которые мы получаем.

Я проверил это на нескольких машинах, и результаты меняются, я не могу точно определить причину.

Я протестировал его в последней версии Ubuntu, Firefox 3.6.13, используя Java версии 1.6.0_22, он работает там. У меня также есть ноутбук с Windows XP с той же версией Firefox, использующий версию Java 1.6.0_17, где он также работает.

Есть 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). Он делает это на всех компьютерах, и все пути в конфигурации кажутся действительными.

Пример файла конфигурации, для чего он стоит:

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

Я надеялся, что кто-нибудь найдет подсказку или, возможно, несколько советов о том, как продолжить отладку. Я в недоумении.

Ответы [ 2 ]

1 голос
/ 15 июня 2016

Скорее всего, я слишком опоздал, чтобы это вам пригодилось, но у меня были похожие проблемы, и добавление dist\WINXXX_DBG.OBJ\lib к моему PATH решило эту проблему.

0 голосов
/ 25 августа 2016

Быстрый ответ: используйте x86 jdk , а не x64 jdk с NSS и JSS

Быстрый тест по базе данных сертификатов NSS:

keytool -list -v -storetype pkcs11 -providerClass sun.security.pkcs11.SunPKCS11 -providerArg NSS_CONFIG_FIPS

где NSS_CONFIG_FIPS - путь к файлу конфигурации, указывающий на базу данных NSS. Эта команда завершится неудачно с трассировкой стека, которая соответствует ошибке спрашивающего, если это проблема JDK, и будет выполнена успешно, если JDK настроен правильно (и если файл конфигурации правильный)

Обратите внимание, что моя трассировка стека включала в себя сообщение:

Причина: java.io.IOException:% 1 не является допустимым приложением Win32.

Я запустил dumpbin / headers в библиотеках NSS и обнаружил, что все двоичные файлы, созданные в Mozilla, являются 32-битными. Я установил x86 jdk и переименовал JAVA_HOME. Все начало работать.

По мнению Вивека, NSS и сопровождающие его исполняемые файлы очень чувствительны к наличию библиотек. Убедитесь, что в пути присутствуют все файлы .dll, .lib и .chk. В частности, modutil.exe не сможет выполнить определенные команды без файлов chk, а сообщения об ошибках не помогут. Ваша папка NSS lib должна содержать папки lib NSS и NSPR, файлы jss4.dll и jss4.lib и jss4.jar.

Также обратите внимание, что если вы создаете NSS самостоятельно, библиотеки не будут подписаны утвержденным сертификатом подписи кода, что вызовет проблемы с JCA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...