Hi,
I am developing a message level security framework in which secrete key is
included. I am a bit confused about how to create a ds:KeyInfo for such a
secrete key, since if I follow WS-Security to create:
<ds:KeyInfo>
<wsse:SecurityTokenReference>
<wsse:Reference URI="#00001"/>
</wsse:SecurityTokenReference>
</ds:KeyInfo>
only, it will give me an AxisFault : "Didn't get a key"
org.apache.xml.security.signature.XMLSignatureException: Didn't get a key
at
org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:260)
at
org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:169)
at
org.apache.axis.encoding.DeserializationContextImpl.endElement(DeserializationContextImpl.java:1015)
at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown
Source)
at
org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown
Source)
at
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown
Source)
at
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown
Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:345)
at
org.apache.axis.encoding.DeserializationContextImpl.parse(DeserializationContextImpl.java:242)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:538)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:376)
at org.apache.axis.client.Call.invokeEngine(Call.java:2583)
at org.apache.axis.client.Call.invoke(Call.java:2553)
at org.apache.axis.client.Call.invoke(Call.java:1753)
at samples.security.Client.doService(Client.java:69)
at samples.security.Client.main(Client.java:95)
However, I am not able to create a <ds:KeyValue> which is not a DSA or RSA
key, I tried to create a KeyValue and pass a non-standard element (with a
wsse namespace) to it, such as :
KeyValue kv = new KeyValue(doc, securityTokenReference)
It does not seem to work, it creates an empty <ds:KeyValue> within
<ds:KeyInfo>, which again gets the same AxisFault.
I create my secrete key as:
char[] passwordchars = new char[password.length()];
SignatureAlgorithm sa = new SignatureAlgorithm(doc,
"http://www.w3.org/2000/09/xmldsig#hmac-sha1",
33);
SecretKey sk = new SecretKeySpec(password.getBytes(),
sa.getJCEAlgorithmString());
I have no idea what KeyInfo can be constructed for HMAC key.
Thanks very much.
Mei