No puedo realizar una solicitud SOAP cifrada en PHP. Según la documentación, encripté cada solicitud a la pasarela de pago. Generé un CSR y lo envié a la autoridad para el certificado. Me enviaron el certificado de dominio y el certificado de CA. El mayor problema es que la documentación no está destinada a PHP. Según el documento:
El servicio web está protegido con WS-Security Sign y política de cifrado
Después de buscar durante mucho tiempo, encontré una clase de ayuda de Git, pero cada vez que intento conectarme, aparece el siguiente error:
Error de seguridad general (No se encontraron certificados para el descifrado (KeyId))
Código de falla: wsse: seguridad no válida
Traté de configurar el encabezado SSL de la siguiente manera:
$contextOptions = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'cafile' => '../../certs/CA.cer', 'local_cert' => '../../certs/server.cer', 'local_pk' => '../../certs/private_key.key', 'verify_depth' => 0, 'allow_self_signed'=>true, ) ); $sslContext = stream_context_create($contextOptions);Actualizar
Definí las claves como:
define('PRIVATE_KEY', 'server_prvate_key.key'); define('CERT_FILE', 'domain_cert.cer'); define('SERVICE_CERT', 'CA.cer');¿Algún problema con esta definición (consulte el enlace GIT anterior)?
¿Has probado a usar curl?
Utilice la siguiente opción para configurar su certificado:
curl_setopt($ch,CURLOPT_CAINFO, 'CA.cer' ); curl_setopt($ch,CURLOPT_SSLCERT, 'domain_cert.cer' ); curl_setopt($ch,CURLOPT_SSLKEY, 'server_prvate_key.key' ); curl_setopt($ch,CURLOPT_SSLCERTPASSWD, 'certificate_password' ); //if haveUtilizo una conexión encriptada a las pasarelas de pago y otros servicios que usan curl y funciona de maravilla.