XML签名与XMLSignature

时间:2014-01-30 15:48:52

标签: java xml xml-signature pkcs#11

我们有一个需要使用令牌签名XML的Web应用程序。我们安装了驱动程序并从“Windows-MY”访问证书。但每次我们调用signature.sign(dsc);出现一个要求密码的窗口。可以使用方法符号并将PIN作为参数传递以避开该窗口吗?

用于签名的方法:

XMLSignature signature = sig.newXMLSignature(si, ki); 
signature.sign(dsc);

Image that appear to input PIN

1 个答案:

答案 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

希望这有帮助,