如何找到PKCS#11的实现和配置文件

时间:2012-10-09 06:25:35

标签: java pkcs#11

我正在尝试创建一个程序,从令牌(Safenet)读取和显示证书信息 但我面临的问题是:

Exception in thread "main" java.security.ProviderException: Error parsing configuration

所以我认为问题出在配置文件中。

如何制作配置文件以及实施文件以使其正常工作。 感谢

2 个答案:

答案 0 :(得分:0)

您可以通过更正%AS_HOME%\ domains \ nssdomain \ config \

中的nss.cfg来解决错误

您可以按照page上的“配置Glassfish以使用NSS商店”一节中的说明进行操作。

请点击此链接also

答案 1 :(得分:0)

为了在java中使用PKCS#11,您需要提供一个配置文件,您至少需要指定library和name参数。在此参数中,您必须指定令牌的本机库路径和任意标识符。此外,您可以添加更多参数,但它们是可选的,您可以查看java pkcs#11 reference guide。我给你一个代码示例来实例化PKCS#11

// create configuration
String pkcs11nativeLibrary = "/path_to_native_library/library.so";
String pkcs11ConfigSettings = "name = mySmartCard\n" + "library = " + pkcs11nativeLibrary;
byte[] pkcs11ConfigBytes = pkcs11ConfigSettings.getBytes();
final ByteArrayInputStream confStream = new ByteArrayInputStream(pkcs11ConfigBytes);

// instantiate the provider with your config
SunPKCS11 pkcs11Provider = new SunPKCS11(confStream);
Security.addProvider(pkcs11Provider);

// get the keystore
Char[] pkcs11Password = "your_password".toCharArray();
KeyStore myPKCS11KS = KeyStore.getInstance("PKCS11", pkcs11Provider );
myPKCS11KS.load(null, pkcs11Password);

在示例中,我直接输入了pkcs11密码,但是当您尝试从某个客户端加载PKCS#11时,您必须通过dinamically获取密码才能这样做,您可以更改密钥存储实例,例如:< / p>

// YourCallbackHandler must implements javax.security.auth.callback.CallbackHandler
KeyStore.CallbackHandlerProtection cbhp = new KeyStore.CallbackHandlerProtection(new YourCallbackHandler());
KeyStore.Builder builder = KeyStore.Builder.newInstance("PKCS11", pkcs11Provider, cbhp);
KeyStore myPKCS11KS = builder.getKeyStore();

希望这有帮助,