我想使用nss作为pkcs11的提供者,我在java,oracle JRE和ubuntu 64bit上编码。我尝试了2种不同的包装,iaik和SunPKCS11,但两者都有同样的问题。对于我的提供者,我首先尝试使用libnss3.so,每次我在实例化模块中获得IOException。然后我使用libsoftokn3.so,我成功实例化了一个模块。但是现在我在初始化时面临这个例外:“CKR_ARGUMENTS_BAD”
这是我的代码,首先使用iaik,第二个使用SunPKCS11
iaiak:
Module pkcs11Module = Module.getInstance("libsoftokn.so");
pkcs11Module.initialize(null); //Here Throws the Excption:"iaik.pkcs.pkcs11.wrapper.PKCS11Exception: CKR_ARGUMENTS_BAD"
Info info = pkcs11Module.getInfo();
System.out.println(info);
pkcs11Module.finalize(null);
SunPKCS11:
String configName = "cfg";
Provider p = new sun.security.pkcs11.SunPKCS11(configName); //Here Throws the Excption:"sun.security.pkcs11.wrapper.PKCS11Exception: CKR_ARGUMENTS_BAD"
Security.addProvider(p);
和文件“cfg”:
name = nss
library = /usr/lib/libsoftokn3.so
答案 0 :(得分:2)
您可以像这样指定目录,而不是指定库。
Properties props = new Properties();
props.put("name", "nss");
props.put("nssLibraryDirectory", libDir);
props.put("nssSecmodDirectory", dbDir);
props.put("nssModule", "fips");
props.put("nssDbMode", "readWrite");
ByteArrayOutputStream out = new ByteArrayOutputStream();
props.store(out, null);
ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
Provider ret = new sun.security.pkcs11.SunPKCS11(in);