Ver Mensaje Individual
  #16 (permalink)  
Antiguo 02/12/2010, 04:25
Avatar de cluster28
cluster28
 
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 11 meses
Puntos: 32
Respuesta: Como puedo ver el header enviado en soap?

El entorno de desarrollo no depende de mí por lo que tengo que esperar unos días. He estado mirando las clases pero no se como crear la entrada "dsig:Signature". en el XML actual.

He conseguido generar este:

Código XML:
Ver original
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="com.logicboxes.foundation.sfnb.order.DomOrder" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  3. <SOAP-ENV:Header>
  4. <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" SOAP-ENV:mustUnderstand="1">
  5. <wsse:BinarySecurityToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" wsu:Id="pfxb2dd9188-6917-a71f-6e4e-2efd3f44d07e" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3">
  6. </wsse:BinarySecurityToken>
  7. </wsse:Security>
  8. </SOAP-ENV:Header>
  9. <SOAP-ENV:Body>
  10. ....................
  11. </SOAP-ENV:Body>
  12. </SOAP-ENV:Envelope>

Para generar esta parte:

Código XML:
Ver original
  1. <dsig:KeyInfo>
  2. <wsse:SecurityTokenReference>
  3. <wsse:Reference URI="#aXhOJ5" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
  4. </wsse:SecurityTokenReference>
  5. </dsig:KeyInfo>

Está el método "attachTokentoSig" pero al no tener la etiqueta "xxx:Signature" en el XML me salta un error, y no he visto el método para generarlo.

EDICIÓN:

He conseguido hacer esta cabecera:

Código XML:
Ver original
  1. <SOAP-ENV:Header>
  2.     <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" SOAP-ENV:mustUnderstand="1">
  3.         <wsse:BinarySecurityToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" wsu:Id="pfxe39290ee-be0c-44d0-e056-10e5b549c949" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3">
  4.         </wsse:BinarySecurityToken>
  5.         <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
  6.             <ds:SignedInfo>
  7.                 <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
  8.                 <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
  9.                 <ds:Reference URI="#pfx05939a1b-4e49-08eb-8d9e-9cef211f1830">
  10.                     <ds:Transforms>
  11.                         <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
  12.                     </ds:Transforms>
  13.                     <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
  14.                     <ds:DigestValue>2jmj7l5rSw0yVb/vlWAYkK/YBwk=</ds:DigestValue>
  15.                 </ds:Reference>
  16.             </ds:SignedInfo>
  17.             <ds:SignatureValue>F0EiTzui+kwS9XWoOZzJUZi3a1jnrOyzoxgdLhnoBw/Tg3DK22rwoDyawvtuNwL/PEg5CKIETJk0aQUrHtjuvIi2xLUK6xwcdke2yodoXxTt5ksc9hBE0yekjqsrL/ZsX4C1/h8+ktc+E4a/0ofebB4Qqc7NzBP5pehuwW9rJOM=</ds:SignatureValue>
  18.         </ds:Signature>
  19.     </wsse:Security>
  20. </SOAP-ENV:Header>

Cambiando la KEY funciona. He puesto un típica de "-----BEGIN RSA PRIVATE KEY-----" por el certificado que me han facilitado "-----BEGIN CERTIFICATE-----". Ya comenté que sólo tengo un certificado pero no un clave pública.

Me lío con lo de los certificados y claves públicas.

Código PHP:

Código PHP:
define('CERT_FILE''./prueba.pem'); 
function 
__doRequest($request$location$saction$version
            {
                
$doc = new DOMDocument('1.0');
                
$doc->loadXML($request);
                
$objWSSE = new WSSESoap($doc);
          
        
/* Crear el objeto de seguridad, establece y carga la clave */
                
$objKey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1, array ('type'=>'private'));
                
$objKey->loadKey(CERT_FILETRUE);
    
                
/* Firmamos el mensaje */
    
                
$objWSSE->signSoapDoc($objKey); 
                
$token $objWSSE->addBinaryToken($cert$isPEMFormat=TRUE$isDSig=TRUE);
                
$objWSSE->attachTokentoSig($token); 
                
                return 
parent::__doRequest($objWSSE->saveXML(), $location$saction$version);
            } 

Última edición por cluster28; 02/12/2010 a las 05:15