You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by Dini Omar <zi...@gmail.com> on 2008/07/13 16:07:25 UTC
Rampart - Using Non-Ascii passwords
Is there a way i can use a non-ascii password for the keystore? Here is what
i tried to do on the password callback handler but it doesnt seem to solve
the problem.
import org.apache.ws.security.WSPasswordCallback;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class PWCBHandler implements CallbackHandler {
public void handle(Callback[] callbacks) throws IOException,
UnsupportedCallbackException {
byte[] originalStringInBytes = "Aepproj1,".getBytes("ISO-8859-1");
byte[] md5 = null;
try {
md5 = MD5(originalStringInBytes);
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String tstString = new String(md5, "ISO-8859-1");
System.out.println("At callback handler" + tstString+"\n");
for (int i = 0; i < callbacks.length; i++) {
WSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i];
String id = pwcb.getIdentifer();
if("client".equals(id)) {
pwcb.setPassword(tstString);
} else if("service".equals(id)) {
pwcb.setPassword(tstString);
}
pwcb.setPassword(tstString);
}
}
public static byte[] MD5(byte[] bytes) throws NoSuchAlgorithmException {
MessageDigest md;
md = MessageDigest.getInstance("MD5");
byte[] md5hash = new byte[8];
md.update(bytes);
md5hash = md.digest();
return md5hash;
}
}
And here is how i configured the keystore in the policy.xml file.
<ramp:signatureCrypto>
<ramp:crypto
provider="org.apache.ws.security.components.crypto.Merlin">
<ramp:property
name="org.apache.ws.security.crypto.merlin.keystore.type">PKCS12</ramp:property>
<ramp:property
name="org.apache.ws.security.crypto.merlin.file">E:\Documents and
Settings\ziggy\My
Documents\eclipse.workspace\webservices.soap.axis2.samples\src\com\ttdev\wrap\client2\257804.p12</ramp:property>
<ramp:property
name="org.apache.ws.security.crypto.merlin.keystore.alias">257804</ramp:property>
<ramp:property
name="org.apache.ws.security.crypto.merlin.keystore.password"></ramp:property>
</ramp:crypto>
</ramp:signatureCrypto>
Here is the error that i get. What im i doing wrong?
java.io.IOException: PKCS12 key store mac invalid - wrong password or
corrupted file.
at org.bouncycastle.jce.provider.JDKPKCS12KeyStore.engineLoad(Unknown
Source)
at java.security.KeyStore.load(KeyStore.java:1150)
at
org.apache.ws.security.components.crypto.AbstractCrypto.load(AbstractCrypto.java:138)
at
org.apache.ws.security.components.crypto.AbstractCrypto.<init>(AbstractCrypto.java:97)
at
org.apache.ws.security.components.crypto.Merlin.<init>(Merlin.java:65)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
at
org.apache.ws.security.components.crypto.CryptoFactory.loadClass(CryptoFactory.java:211)
at
org.apache.ws.security.components.crypto.CryptoFactory.getInstance(CryptoFactory.java:93)
at
org.apache.rampart.util.RampartUtil.getSignatureCrypto(RampartUtil.java:235)
at
org.apache.rampart.builder.BindingBuilder.getSignatureBuider(BindingBuilder.java:294)
at
org.apache.rampart.builder.AsymmetricBindingBuilder.doSignature(AsymmetricBindingBuilder.java:596)
at
org.apache.rampart.builder.AsymmetricBindingBuilder.doSignBeforeEncrypt(AsymmetricBindingBuilder.java:385)
at
org.apache.rampart.builder.AsymmetricBindingBuilder.build(AsymmetricBindingBuilder.java:95)
at org.apache.rampart.MessageBuilder.build(MessageBuilder.java:131)
at
org.apache.rampart.handler.RampartSender.invoke(RampartSender.java:64)
at org.apache.axis2.engine.Phase.invoke(Phase.java:292)
at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:212)
at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:377)
at
org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:374)
at
org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:211)
at
org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
at
org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:528)
at
org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:508)
at com.ttdev.wrap.client2.Client.main(Client.java:81)
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
at
org.apache.ws.security.components.crypto.CryptoFactory.loadClass(CryptoFactory.java:211)
at
org.apache.ws.security.components.crypto.CryptoFactory.getInstance(CryptoFactory.java:93)
at
org.apache.rampart.util.RampartUtil.getSignatureCrypto(RampartUtil.java:235)
at
org.apache.rampart.builder.BindingBuilder.getSignatureBuider(BindingBuilder.java:294)
at
org.apache.rampart.builder.AsymmetricBindingBuilder.doSignature(AsymmetricBindingBuilder.java:596)
at
org.apache.rampart.builder.AsymmetricBindingBuilder.doSignBeforeEncrypt(AsymmetricBindingBuilder.java:385)
at
org.apache.rampart.builder.AsymmetricBindingBuilder.build(AsymmetricBindingBuilder.java:95)
at org.apache.rampart.MessageBuilder.build(MessageBuilder.java:131)
at
org.apache.rampart.handler.RampartSender.invoke(RampartSender.java:64)
at org.apache.axis2.engine.Phase.invoke(Phase.java:292)
at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:212)
at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:377)
at
org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:374)
at
org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:211)
at
org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
at
org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:528)
at
org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:508)
at com.ttdev.wrap.client2.Client.main(Client.java:81)
Caused by: org.apache.ws.security.components.crypto.CredentialException:
Failed to load credentials. Inner Exception: [PKCS12 key store mac invalid -
wrong password or corrupted file.]
at
org.apache.ws.security.components.crypto.AbstractCrypto.load(AbstractCrypto.java:141)
at
org.apache.ws.security.components.crypto.AbstractCrypto.<init>(AbstractCrypto.java:97)
at
org.apache.ws.security.components.crypto.Merlin.<init>(Merlin.java:65)
... 22 more
java.lang.InstantiationException:
org.apache.ws.security.components.crypto.Merlin
at java.lang.Class.newInstance0(Class.java:335)
at java.lang.Class.newInstance(Class.java:303)
at
org.apache.ws.security.components.crypto.CryptoFactory.loadClass(CryptoFactory.java:219)
at
org.apache.ws.security.components.crypto.CryptoFactory.getInstance(CryptoFactory.java:93)
at
org.apache.rampart.util.RampartUtil.getSignatureCrypto(RampartUtil.java:235)
at
org.apache.rampart.builder.BindingBuilder.getSignatureBuider(BindingBuilder.java:294)
at
org.apache.rampart.builder.AsymmetricBindingBuilder.doSignature(AsymmetricBindingBuilder.java:596)
at
org.apache.rampart.builder.AsymmetricBindingBuilder.doSignBeforeEncrypt(AsymmetricBindingBuilder.java:385)
at
org.apache.rampart.builder.AsymmetricBindingBuilder.build(AsymmetricBindingBuilder.java:95)
at org.apache.rampart.MessageBuilder.build(MessageBuilder.java:131)
at
org.apache.rampart.handler.RampartSender.invoke(RampartSender.java:64)
at org.apache.axis2.engine.Phase.invoke(Phase.java:292)
at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:212)
at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:377)
at
org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:374)
at
org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:211)
at
org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
at
org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:528)
at
org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:508)
at com.ttdev.wrap.client2.Client.main(Client.java:81)
Exception in thread "main" java.lang.RuntimeException:
org.apache.ws.security.components.crypto.Merlin cannot create instance
at
org.apache.ws.security.components.crypto.CryptoFactory.loadClass(CryptoFactory.java:224)
at
org.apache.ws.security.components.crypto.CryptoFactory.getInstance(CryptoFactory.java:93)
at
org.apache.rampart.util.RampartUtil.getSignatureCrypto(RampartUtil.java:235)
at
org.apache.rampart.builder.BindingBuilder.getSignatureBuider(BindingBuilder.java:294)
at
org.apache.rampart.builder.AsymmetricBindingBuilder.doSignature(AsymmetricBindingBuilder.java:596)
at
org.apache.rampart.builder.AsymmetricBindingBuilder.doSignBeforeEncrypt(AsymmetricBindingBuilder.java:385)
at
org.apache.rampart.builder.AsymmetricBindingBuilder.build(AsymmetricBindingBuilder.java:95)
at org.apache.rampart.MessageBuilder.build(MessageBuilder.java:131)
at
org.apache.rampart.handler.RampartSender.invoke(RampartSender.java:64)
at org.apache.axis2.engine.Phase.invoke(Phase.java:292)
at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:212)
at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:377)
at
org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:374)
at
org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:211)
at
org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
at
org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:528)
at
org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:508)
at com.ttdev.wrap.client2.Client.main(Client.java:81)