我正在尝试创建一个程序,从令牌(Safenet)读取和显示证书信息 但我面临的问题是:
Exception in thread "main" java.security.ProviderException: Error parsing configuration
所以我认为问题出在配置文件中。
如何制作配置文件以及实施文件以使其正常工作。 感谢
答案 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();
希望这有帮助,