2010-05-03 1 views
2

Tous, Je travaille (encore) sur l'appel d'un service Web WSE 3.0 .NET à partir de Java/Metro 2.0. Nous avons les exigences de sécurité définies afin que nous chiffrions le corps & en-tête des messages & signer les en-têtes. Je suis en mesure d'envoyer une demande à leur service & obtenir une réponse, mais Metro est incapable de valider la signature & renvoie une erreur du code WSIT. Je suis le dernier code WSIT de CVS & Voici un extrait de code de la méthode qui fait sauter:Erreur d'espace de noms Metro & StreamBuffer - est-ce que je comprends bien?

de com.sun.xml.ws.security.opt.impl.incoming.GenericSecuredHeader:

private XMLStreamBuffer completeHeader; 
public void writeTo(XMLStreamWriter w) throws XMLStreamException { 
     try { 
      // TODO what about in-scope namespaces 
      completeHeader.writeToXMLStreamWriter(w); 
     } catch (Exception e) { 
      throw new XMLStreamException(e); 
     } 
    } 

Comme vous pouvez le voir, il y a un TODO là-dedans, qui indique que la méthode ne peut pas gérer la situation que j'ai, mais je ne suis pas sûr de savoir ce qu'ils entendent par espaces de noms 'in-scope'.

est ici l'extrait de XML de la réponse du service Web qu'il est déferlant sur:

<wsa:Action wsu:Id="Id-46282a5d-c7fa-403c-8ac9-f7df0dfdb0cf"> 
http://someAction</wsa:Action> 
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> 
<SignedInfo> 
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" /> 
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /> 

<Reference URI="#Id-46282a5d-c7fa-403c-8ac9-f7df0dfdb0cf"> 
<Transforms> 
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> 
</Transforms> 
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> 
<DigestValue> 
/2ivNKDpYSLqPWHzrSxN/RuZ/e8=</DigestValue> 
</Reference> 

Dans la trace de la pile (inclus ci-dessous), il se plaint de ne pas être en mesure de valider la référence URI = "# Id-46282a5d-c7fa-403c-8ac9-f7df0dfdb0cf ". Ce que je ne comprends pas, c'est: est-ce que cela échoue parce que l'élément Reference n'a pas d'attribut ou de préfixe d'espace de nommage?Devraient-ils être autorisés à hériter de l'espace de nom de l'élément Signature parent ou les classes StreamBuffer ne peuvent-elles pas gérer cela?

Pour contraster, voici un extrait XML similaire de ma demande (générée par WSIT), où le préfixe ds est

xmlns: ds = "http://www.w3.org/2000/09/ xmldsig # "

<ds:Signature xmlns:ns10="http://www.w3.org/2003/05/soap-envelope" 
xmlns:ns11="http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512" 
xmlns:ns12="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity" Id="_1"> 
<ds:SignedInfo> 
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"> 
<exc14n:InclusiveNamespaces PrefixList="wsse S"/> 
</ds:CanonicalizationMethod> 
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/> 

<ds:Reference URI="#_5002"> 
<ds:Transforms> 
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"> 
<exc14n:InclusiveNamespaces PrefixList="S"/> 
</ds:Transform> 
</ds:Transforms> 
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> 
<ds:DigestValue> 
vtf9n+OcI1nT0exavD4/ZQy6jm8=</ds:DigestValue> 
</ds:Reference> 

Lorsque Metro génère ces blocs, tout a un préfixe d'espace de nommage.

Si vous lisez encore jusqu'ici - merci! Voici quelques extraits de la trace de la pile:

Error occurred while trying to cache START_ELEMENTcom.sun.xml.stream.buffer.stax 
.StreamReaderBufferProcessor$InternalNamespaceContext 
[16:12:54.026] WSS1759: Following error null occured while performing canonicali 
zation null 
[16:12:54.026] javax.xml.stream.XMLStreamException 
[16:12:54.026] at com.sun.xml.ws.security.opt.impl.incoming.GenericSecuredHeade 
r.writeTo(GenericSecuredHeader.java:303) 
[16:12:54.026] at com.sun.xml.ws.security.opt.impl.incoming.StreamWriterData.wr 
ite(StreamWriterData.java:101) 
[16:12:54.026] at com.sun.xml.ws.security.opt.crypto.dsig.Exc14nCanonicalizer.t 
ransform(Exc14nCanonicalizer.java:153) 
[16:12:54.026] at com.sun.xml.ws.security.opt.crypto.dsig.Transform.transform(T 
ransform.java:182) 
[16:12:54.026] at com.sun.xml.ws.security.opt.crypto.dsig.Reference.transform(R 
eference.java:183) 
[16:12:54.026] at com.sun.xml.ws.security.opt.crypto.dsig.Reference.validate(Re 
ference.java:102) 
[16:12:54.026] at com.sun.xml.ws.security.opt.impl.incoming.processor.SignedInf 
oProcessor.processReference(SignedInfoProcessor.java:422) 
[16:12:54.026] at com.sun.xml.ws.security.opt.impl.incoming.processor.SignedInf 
oProcessor.processReferences(SignedInfoProcessor.java:385) 
[16:12:54.026] at com.sun.xml.ws.security.opt.impl.incoming.processor.SignedInf 
oProcessor.process(SignedInfoProcessor.java:189) 
[16:12:54.026] at com.sun.xml.ws.security.opt.impl.incoming.Signature.process(S 
ignature.java:206) 
[16:12:54.026] at com.sun.xml.ws.security.opt.impl.incoming.SecurityRecipient.h 
andleSecurityHeader(SecurityRecipient.java:466) 
[16:12:54.026] at com.sun.xml.ws.security.opt.impl.incoming.SecurityRecipient.c 
acheHeaders(SecurityRecipient.java:281) 
[16:12:54.026] at com.sun.xml.ws.security.opt.impl.incoming.SecurityRecipient.v 
alidateMessage(SecurityRecipient.java:223) 
[16:12:54.026] at com.sun.xml.wss.jaxws.impl.SecurityTubeBase.verifyInboundMess 
age(SecurityTubeBase.java:462) 
[16:12:54.026] at com.sun.xml.wss.jaxws.impl.SecurityClientTube.processClientRe 
sponsePacket(SecurityClientTube.java:412) 
[16:12:54.026] at com.sun.xml.wss.jaxws.impl.SecurityClientTube.processResponse 


javax.xml.ws.WebServiceException: com.sun.xml.wss.impl.WssSoapFaultException: WSS1722: Error occurred while validating Reference with URI: #Id-46282a5d-c7fa-403c-8ac9-f7df0dfdb0c 
f 

Répondre

0

Après avoir fait d'autres recherches, je crois que ma compréhension initiale est correcte. le code Metro/WSIT qui appelle le code StreamBuffer pour diffuser le code XML à partir de la réponse SOAP ne peut pas gérer les éléments qui n'ont pas de préfixes ou d'attributs d'espace de noms. J'ai présenté un problème contre WSIT, pour ceux qui sont intéressés par le suivi:

https://wsit.dev.java.net/issues/show_bug.cgi?id=1423

+0

Pouvez-vous me donner la solution en ce qui concerne la question? [Veuillez cocher ce lien] (http://stackoverflow.com/questions/28696160/error-while-serializing-timestamp-element-occured-while-performing-canonicalizat) –

Questions connexes