Помогите быстро запустить NSS - PullRequest
1 голос
/ 30 мая 2011

Я запускаюсь в NSS, и мне удалось его построить.Результат был помещен в папку с именем dist и содержит несколько подпапок, содержащих несколько dll-файлов exe и т. Д.

dist  
    /WINNT6.0_DBG.OBJ  
         /bin  
         /include  
         /lib   

Я пытаюсь попробовать, но я не уверен, что такое nssLibraryDirectory и nssSecmodDirectory.

Для nssLibraryDirectory я должен скопировать все в dist в один файл и обратиться к нему из nssLibraryDirectory?Как насчет nssSecmodDirectory?Я не уверен, как я должен настроить, чтобы начать использовать Sun pkcs11.

Например, этот тривиал:

String configName = "nss.cfg";
Provider p = new sun.security.pkcs11.SunPKCS11(configName );

Где nss.cfg:

 name = NSS  
 nssLibraryDirectory = E:\NSS\nss-3.12.4-with-nspr-4.8\mozilla\dist\WINNT6.0_DBG.OBJ\lib 
 nssDbMode = noDb  

Дает исключение

Причина: java.io.IOException: указанный модуль не найден.at sun.security.pkcs11.Secmod.nssLoadLibrary (собственный метод)

Ответы [ 2 ]

0 голосов
/ 10 ноября 2016

Некоторые заметки из моих трудных попыток .... Я думаю, что это поможет любому, кто хочет использовать NSS.

Я склонен создавать String в коде Java, чтобы узнать, в какой строке происходит ошибка. Я должен сказать, что это лучше, потому что Eclipse может устранить все ошибки конструкции String. Тогда вы обращаете внимание на значения для заполнения.

Я использую этот код:

String config = "xxxxxxx" +
                "xxxxxxx" +
                "xxxxxxx" +
                "\n";
provider = new SunPKCS11(new ByteArrayInputStream(config.getBytes()));
Security.insertProviderAt(provider, 1);

Все флаги для конфигурации провайдера: (от http://j7a.ru/_config_8java_source.html, похоже на openjdk 8 sun.security.pkcs11.Config.java.)

name=xxxxxx       //some text, " must be escaped with \
library=/location/of/your/.so/or/.dll/file //not compatible with NSS mode, must be quoted if contains space, and if quoted, " must be escaped
description=
slot=             //not compatible with NSS mode
slotListIndex=    //not compatible with NSS mode
enableMechanisms=
disableMechanisms=
attributes=
handleStartupErrors=
insertionCheckInterval=
showInfo=true/false
keyStoreCompatibilityMode=
explicitCancel=
omitInitialize=
allowSingleThreadedModules=
functionList=
nssUseSecmod=true/false  //not campatible with 'library'
nssLibraryDirectory=     //not campatible with 'library'
nssSecmodDirectory=      //not campatible with 'library'
nssModule=some text      //not campatible with 'library'
nssDbMode=readWrite, readOnly, noDb   //not campatible with 'library'
nssNetscapeDbWorkaround=true/false    //not campatible with 'library'
nssArgs="name1='value1' name2='value2' name3='value3' ... "          //not compatible with NSS mode
nssUseSecmodTrust=true/false

Примеры nssArgs=: (через пробел)

"nssArgs=\"configdir='" + NSS_JSS_Utils.getFireFoxProfilePath() + "' "
+ "certPrefix='' "                          
+ "keyPrefix='' "
+ "secmod='secmod.db' "
+ "flags='readOnly'\""

Некоторые примеры экранирования в коде Java:

String config = "name=\"NSS Module\"\n" +
                "......" +
                "\n";

Если с пробелом, должен быть указан " ". ' ' не может быть использовано. Каждый " должен быть экранирован с \.

Теперь несколько реальных примеров.

Чтобы использовать модули безопасности Firefox через NSS:

String config = "name=\"NSS Module\"\n"
+ "attributes=compatibility\n"
+ "showInfo=true\n"
+ "allowSingleThreadedModules=true\n"
+ "nssLibraryDirectory=" + NSS_JSS_Utils.NSS_LIB_DIR + "\n"
+ "nssUseSecmod=true\n"
+ "nssSecmodDirectory=" + NSS_JSS_Utils.getFireFoxProfilePath();

Для использования libsoftokn3.so (я не знаю, для чего он используется, но я вижу, что кто-то использовал его с nssArgs):

String config = "library=" + NSS_JSS_Utils.NSS_LIB_DIR + "/libsoftokn3.so" + "\n"
    + "name=\"Soft Token\"\n";
    + "slot=2\n"
    + "attributes=compatibility\n"
    + "allowSingleThreadedModules=true\n"
    + "showInfo=true\n"
    + "nssArgs=\"configdir='" + NSS_JSS_Utils.getFireFoxProfilePath() + "' "
                + "certPrefix='' "
                + "keyPrefix='' "
                + "secmod='secmod.db' "
                + "flags='readOnly'\""
    + "\n";

NSS_JSS_Utils.NSS_LIB_DIR возвращает каталог, в котором находятся все библиотеки NSS. Иногда они устанавливаются по умолчанию (например, в моем RedHat 7.2), но иногда вы должны устанавливать их вручную.

NSS_JSS_Utils.getFireFoxProfilePath() возвращает местоположение вашего профиля FireFox . Если вы используете modutil, поставляемый с NSS / NSPR, вы увидите, что установленные вами модули безопасности хранятся в secmod.db в этой папке. Если вы не можете их найти, возможно, вы взяли не тот файл.

Подробнее о том, как заполнить эти значения:

NSS PKCS # 11 Spec

0 голосов
/ 15 ноября 2011

nssLibraryDirectory должен содержать только подкаталог lib. Он также должен отображаться в переменной PATH - либо путем изменения переменной среды, либо путем указания ее в параметрах JVM.

...