2010-10-28 6 views
1

J'ai commencé à étudier les services Web entre la banque et un client et je me heurte à un mur quand il s'agit de signer un SOAP. Ce dont j'ai besoin devrait ressembler à quelque chose comme çaSignature de l'en-tête de savon

<soapenv:Envelope xmlns:cor="http://bxd.fi/CorporateFileService" xmlns:mod="http://model.bxd.fi" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
<soapenv:Header> 
    <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
     <wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="CertId-9502902" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
      MIID…/DnjbkAZBo7vsj78zzdk7KNliBIqBcIszdJ3dEHRWSI7FspRxyiR0NDm4lpyLwFtfw= 
     </wsse:BinarySecurityToken> 
     <ds:Signature Id="Signature-12345678" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
      <ds:SignedInfo> 
       <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> 
       <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/> 
       <ds:Reference URI="#id-4453123"> 
        <ds:Transforms> 
        <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> 
        </ds:Transforms> 
        <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> 
        <ds:DigestValue>zYeQGz0jnyy3tI5gruq+IlGyzQo=</ds:DigestValue> 
       </ds:Reference> 
      </ds:SignedInfo> 
      <ds:SignatureValue>m5fuzJnVOQGNsu4s2kfaI+UTReUSz9pMxH…=</ds:SignatureValue> 
      <ds:KeyInfo Id="KeyId-98765432"><wsse:SecurityTokenReference wsu:Id="STRId-33454994" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
       <wsse:Reference URI="#CertId-9502902" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/> 
       </wsse:SecurityTokenReference> 
      </ds:KeyInfo> 
     </ds:Signature> 
    </wsse:Security> 
</soapenv:Header> 

Ma question est comment puis-je signer un message de savon en PHP? Je suppose qu'il y a un meilleur moyen que d'ajouter manuellement des en-têtes? J'ai réussi à signer un document XML qui est envoyé dans un corps d'enveloppes mais je suis totalement perdu avec la signature du SOAP lui-même.

+0

Pourriez-vous dire un peu plus précisément comment avez-vous résolu ce problème avec: WSO2. Peut-être pourriez-vous poster votre partie de code côté client? –

+0

J'ai arrêté d'utiliser WSO2 il y a un certain temps. Le problème était que lorsque la réponse SOAP était suffisamment importante, le journal indiquait que la vérification du condensé échouait. Pour autant que je sache lors de la navigation dans les fichiers journaux, le corps de savon entier n'a pas été inclus pour c14-canonicalization qui a causé une erreur de vérification. Mais je peux rechercher mes archives quand j'ai le temps si vous cherchez toujours un exemple – Harmiih

Répondre

0

WSO2 Web Services Framework pour PHP a résolu mon problème

+0

avez-vous implémenté la signature de la charge utile (ApplicationRequest) avec WSO2 aussi bien? un code source à partager à propos de ceux-ci? =) –

+0

J'ai utilisé xmlseclibs pour signer la charge utile. Assez facile à mettre en œuvre. N'avez pas accès à ces codes pour le moment si:/ – Harmiih

+0

Si ce n'est pas trop demander, pourriez-vous jeter un oeil sur le code à http://pastebin.com/9tQ9EM15? Il est autonome (sauf xmlseclibs/wse-php) DownloadFileList à Nordea avec leurs certs de test et leurs identifiants. Tout le paquet avec certs, wse-php, xmlseclibs, Nordea WSDL et sorties @ http://www.kajala.com/temp/NordeaWSTest1.zip, je me demande ce que je fais mal depuis que je reçois toujours "Signature de contenu invalide " Erreur. J'ai converti leur fichier .p12 avec openssl pkcs12 -in WSNDEA1234.p12 -nodes -out WSNDEA1234.pem, puis diviser le résultat en fichiers séparés. Toute aide appréciée. :) –