2012-07-26 105 views
5

Estoy tratando de enviar una solicitud SOAP - PHP con un certificado DER (eso significa que el certificado no tiene una clave privada) pero no tiene éxito.cómo enviar solicitud SOAP con certificado SSL en PHP?

$local_cert = FULL_PATH_TO_MY_CERT; 

    $client = new SoapClient($wsdl, array(
       'local_cert' => $local_cert, 
       'trace' => 1, 
       'exceptions' => 1, 
       'soap_version' => SOAP_1_1, 
       'encoding' => 'ISO-8859-1', 
       'compression' => (SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP), 
       'location' => 'https://webserviceurl:port/ws/servlet/ws' 
      )); 

Sólo que recibo este error:

de advertencia (2): SoapClient :: SoapClient() [soapclient.soapclient]: No se puede establecer fichero `PATHTOMYLOCALCERT clave privada'[APP \ Vendor \ WebServices \ MyWS.php, la línea 206]

Advertencia (2): SoapClient :: SoapClient() [soapclient.soapclient]: no pudo crear un mango SSL [APP \ Vendor \ WebServices \ MyWS.php, la línea 206]

Advertencia (2): SoapClient :: SoapClient() [soapclient.soapclient]: Error al habilitar crypto [APP \ Ven dor \ WebServices \ MyWS.php, línea 206]

Advertencia (2): SoapClient :: SoapClient (https: // webserviceurl: puerto/ws/servlet/ws? wsdl) [soapclient.soapclient]: no se pudo abrir stream: operación fallida [APP \ Vendor \ WebServices \ MyWS.php, línea 206]

Advertencia (2): SoapClient :: SoapClient() [soapclient.soapclient]: Advertencia de E/S: error al cargar la entidad externa " https: // webserviceurl: puerto/ws/servlet/ws? wsdl "[APP \ Proveedor \ WebServices \ MyWS.php, línea 206]

pero he encontrado un pequeño truco (en php.net) usando el función file_get_contents ($ local_cert); los errores se han ido.

Pero viene un nuevo error.

Resultado: string (773) "prefijo de lectura de error: Action.Execute"

Lo que quiero decir es ... este error anterior ... está llegando desde el servicio Web? porque no puede autenticarse con mi pedido?

Gracias a todos. (agradezco sus respuestas)

+0

algo similar aquí: http://stackoverflow.com/questions/11187646/soapclient-not-sending-certificate – BruneX

Respuesta

7

Estoy usando certificado SSL en mi llamada jabonosa.

En mi caso doy la ruta absoluta en mi servidor para wsdl y para local_cert Ya he definido los de mi clase. Tenga en cuenta que estoy usando mi certificado en el formato .pem.

public $local_cert = "/var/www/.../webroot/cert.pem"; 
public $wsdl = "/var/www/.../webroot/my_wsdl.wsdl"; 

$this->client = new SoapClient($this->wsdl, array(
     "trace"   => 1, 
     "exceptions" => true, 
     "local_cert" => $this->local_cert, 
     "uri"   => "urn:xmethods-delayed-quotes", 
     "style"   => SOAP_RPC, 
     "use"   => SOAP_ENCODED, 
     "soap_version" => SOAP_1_2 , 
     "location"  => $this->location 
    ) 
); 

En mi certificado hay 2 partes. Certificado y clave privada RSA.

(1)-----BEGIN CERTIFICATE----- 
MIIFjzCC.... 
.... 
-----END CERTIFICATE----- 
(2)-----BEGIN RSA PRIVATE KEY----- 
MIIEpAI.... 
.... 
ww== 
-----END RSA PRIVATE KEY---- 

Y lo más importante que debe utilizar https enlace para hacer una llamada de jabón. Esto está funcionando bien para mí.

Espero que esto te ayude.

+0

** "uri" => "urn: xmethods-delayyed-quotes" ** Esto es realmente necesario ?? No puedo conectarme todavía – BruneX

Cuestiones relacionadas