Ver Mensaje Individual
  #674  
Antiguo 26-05-2021
luismartin luismartin is offline
Miembro
 
Registrado: may 2021
Posts: 18
Reputación: 0
luismartin Va por buen camino
Cita:
Empezado por canfora Ver Mensaje
Buenos días,

Me acabo de poner con la programación en php para el envío de XML a TBAI a Gipuzkoa.
Estoy utilizando el código que sugerís a continuación y recibo en todo momento el siguiente error:
"
No se puede conectar con la TBAI GIP.

Error: unable to use client certificate (no key found or wrong pass phrase?)

Respuesta de la TBAI GIP: 312
"
Tengo un certificado pfx, el cual indico en la línea de declaración del CURLOPT_SSLCERT y añado la siguiente linea:
curl_setopt($soap_do, CURLOPT_SSLCERTPASSWD, $pass);

Si utilizo una conexión más sencilla, como la que indico a continuación, recibo el siguiente error:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $server);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 100);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $requestXML);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

ERROR:
"
01
Rechazado
Baztertua

001
Error: No se ha utilizado certificado de cliente.
Errorea: Ez da erabili bezeroaren ziurtagiririk.
"

Muchísimas gracias por vuestra ayuda.

Hola Canfora, a ver si esto te puede ayudar, ya que llegué a ese punto, y finalmente la conexión me la validó (aunque ahora estoy con otro problema):
como te indica Bilbur, debes usar un certificado de tipo PEM, pero según he hecho yo, generando 3 ficheros PEM por separado (usando el comando openssl): el del cliente, el de la clave privada, y el de la autoridad certificadora:

Cita:
openssl pkcs12 -in abcd.pfx -out ca.pem -cacerts -nokeys
openssl pkcs12 -in abcd.pfx -out client.pem -clcerts -nokeys
openssl pkcs12 -in abcd.pfx -out key.pem -nocerts
No he podido poner el enlace de la fuente por ser un usuario nuevo Y lo que tampoco tengo aún claro, es cómo hacer esta conversión de forma automática, sin necesidad de user input.

Al final, el código de la petición cURL es este:

Código PHP:
        $xmlStr file_get_contents($rutaFacturaXML);
        
        
$ch curl_init($url);
        
curl_setopt($chCURLOPT_POST1);
        
curl_setopt($chCURLOPT_RETURNTRANSFER1);
        
curl_setopt($chCURLOPT_SSLCERTPATH_TEMP '/client.pem');
        
curl_setopt($chCURLOPT_SSLKEYPATH_TEMP '/key.pem');
        
curl_setopt($chCURLOPT_CAINFOPATH_TEMP '/ca.pem');
        
curl_setopt($chCURLOPT_SSLKEYPASSWD$clave);
        
curl_setopt($chCURLOPT_SSL_VERIFYPEER1);
        
curl_setopt($chCURLOPT_POSTFIELDS$xmlStr);
        
curl_setopt($chCURLOPT_HTTPHEADER, array('Content-Type: application/xml; charset=utf-8')); 
        
$resp curl_exec($ch); 
Responder Con Cita