我们有一个需要使用令牌签名XML的Web应用程序。我们安装了驱动程序并从“Windows-MY”访问证书。但每次我们调用signature.sign(dsc);出现一个要求密码的窗口。可以使用方法符号并将PIN作为参数传递以避开该窗口吗?
用于签名的方法:
XMLSignature signature = sig.newXMLSignature(si, ki);
signature.sign(dsc);
答案 0 :(得分:0)
如果您使用" Windows-MY"通过SUNMSCAPI访问安全令牌您正在为特定CSP供应商驱动程序提供身份验证,因此您无法提供PIN作为方法参数。如果您想以编程方式提供PIN,可以直接使用PKCS11Provider访问安全令牌:
// First configure the Sun PKCS#11 provider. It requires a stream (or file)
// containing the configuration parameters - "name" and "library".
String smartCardDriverPath = "...lib\libpkcs11.so";
String pkcs11ConfigSettings = "name = SmartCardTest\n" + "library = " + smartCardDriverPath;
byte[] pkcs11ConfigBytes = pkcs11ConfigSettings.getBytes();
final ByteArrayInputStream confStream = new ByteArrayInputStream(pkcs11ConfigBytes);
// instantiate provider
SunPKCS11 pkcs11 = pkcs11 = new SunPKCS11(confStream);
Security.addProvider(pkcs11);
// generate the keystore and provide the password
char[] pwd = "your_pass".toCharArray();
KeyStore ks = KeyStore.getInstance("PKCS11",pkcs11);
ks.load(null, pwd);
然后,您可以从密钥库中提取密钥,避免密码窗口输入用于实现签名的用途。
有关Java中PKCS11的更多信息,您可以查看:PKCS11 JAVA GUIDE。
希望这有帮助,