soapclient example php soap ssl https soap-client

soapclient php example



Deshabilitar verificación de certificado en PHP SoapClient (3)

La lista correcta para PHP 5.6.8 es

''ssl'' => array (''verify_peer_name'' => falso, ''allow_self_signed'' => true),

Resumen:
¿Hay alguna manera de forzar la clase incorporada SoapClient en PHP para conectarse a través de HTTPS a un servidor con un certificado no válido?

¿Por qué querría hacer eso?
Implementé una nueva aplicación en un servidor que aún no tiene entrada ni certificado de DNS. Quiero intentar conectarme con un SoapClient antes de configurar la entrada de DNS y corregir el certificado, y la forma más razonable de hacer esto parece ser simplemente hacer que el cliente ignore el certificado durante la prueba.

¿No me doy cuenta de que este es un gran riesgo de seguridad?
Esto es solo para probar. Cuando el servicio entre en producción, habrá un certificado válido y el cliente se verá obligado a validarlo.


La respuesta aceptada funciona pero solo en el modo no WSDL . Si intenta utilizar esto en el modo WSDL (es decir, pasa una url de archivo WSDL como primer argumento), se enfrentará al hecho de que el contexto de la secuencia se ignora al descargar los archivos WSDL. Por lo tanto, si el archivo WSDL también se encuentra en un servidor con el certificado roto, fallará, lo más probable es que al lanzar el mensaje failed to load external entity . Ver más here y here .

Tal como se sugirió, la forma más sencilla es descargar manualmente el archivo WSDL y pasar la copia local al SoapClient. Puede descargarlo, por ejemplo, con file_get_contents usando el mismo contexto de transmisión de la respuesta aceptada.

Tenga en cuenta que también tendrá que hacer esto al crear un SoapServer.


SoapClient toma un contexto de flujo en sus parámetros, que puede crear usted mismo. De esta forma puedes controlar casi todos los aspectos de la capa de transporte:

$context = stream_context_create([ ''ssl'' => [ // set some SSL/TLS specific options ''verify_peer'' => false, ''verify_peer_name'' => false, ''allow_self_signed'' => true ] ]); $client = new SoapClient(null, [ ''location'' => ''https://...'', ''uri'' => ''...'', ''stream_context'' => $context ]);

Documentación: