Некоторые заметки из моих трудных попыток .... Я думаю, что это поможет любому, кто хочет использовать 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