2014-02-21 33 views
3

我收到来自客户端的请求,经过一些数据屏蔽后,我将请求转发给Web服务。为了让webservice授权我,我必须发送< wsse:BinarySecurityToken>元素。我有一个.pfx证书文件,并从此证书中,我需要生成安全令牌。请求的其余部分通过SAAJ生成从.pfx证书生成BinarySecurityToken

<wsse:BinarySecurityToken>my security token</wsse:BinarySecurityToken> 

如何从.pfx文件生成“我的安全令牌”?

演示代码:

InputStream inStream = new FileInputStream("C:\\development\\certs\\cert.pfx"); 
KeyStore ks = KeyStore.getInstance("PKCS12"); 
ks.load(inStream, "PASSWORD".toCharArray()); 
Enumeration<String> aliases = ks.aliases(); 
String aliaz = ""; 
while(aliases.hasMoreElements()){ 
aliaz = aliases.nextElement(); 
if(ks.isKeyEntry(aliaz)){ 
     break; 
} 
} 
X509Certificate certificate = (X509Certificate) ks.getCertificate(aliaz); 
Base64 base64 = new Base64(); 
String token = base64.encodeToString(certificate.getSignature()) 

令牌变量似乎不匹配从SOAPUI生成的令牌。很感谢任何形式的帮助。谢谢!

+0

可以尝试更改'ks.isKeyEntry'到'ks.isCertificateEntry'。 – Abhinav

+0

非常感谢Abhinav为您的快速输入。生成的令牌与以前相同,并且与生成的SOAPUI不同。 – Roopa

+0

令牌值似乎发生在SOAPUI生成的令牌的后面部分。例如:如果SOAPUI生成的值长度为1200,则从java生成的令牌最后是173个字符。 – Roopa

回答

2

变化

String token = base64.encodeToString(certificate.getSignature()); 

String token = base64.encodeToString(certificate.getEncoded());