Ver Mensaje Individual
  #3580  
Antiguo 28-11-2022
Sanduzelai Sanduzelai is offline
Miembro
 
Registrado: ago 2021
Posts: 40
Reputación: 0
Sanduzelai Va por buen camino
Cita:
Empezado por Zósimo Ver Mensaje
Sé que he preguntado antes torpemente y sin investigar, pese a todo quisiera que alguien me dijera ¿con qué hay que certificar los envíos del XML ya firmado por XADES?

Me explico .

Tengo un c12 expedido por Izenpe hace unos meses. Si llamo al archivo del certificado no parece reconocerlo:

Código PHP:
curl_setopt($chCURLOPT_URL$server);
curl_setopt($chCURLOPT_HTTPHEADER$cabeceras);
curl_setopt($chCURLOPT_POSTFIELDS$texto);
curl_setopt($chCURLOPT_VERBOSE1);
curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
curl_setopt($chCURLOPT_SSL_VERIFYHOST2);
curl_setopt($chCURLOPT_TIMEOUT10);
curl_setopt($chCURLOPT_SSLCERTTYPE"PFX");
curl_setopt($chCURLOPT_CAPATH$camino);
curl_setopt($chCURLOPT_CAINFO$file);
curl_setopt($chCURLOPT_SSLCERTPASSWD$pass);
curl_setopt($chCURLOPT_POSTtrue);
curl_setopt($chCURLOPT_RETURNTRANSFERtrue); 
Tampoco me ha funcionado si en lugar de llamar al certificado lo abro, extraigo solo el certificado como tal y lo envío como una variable, tampoco si lo limpio de cabeceras, retornos de carro y demás. Siempre me devuelve el error 01 de que el certificado no es válido o está caducado.
Lo he convertido a PEM como dicen en varios sitios, pero así lo que se mete en el nuevo archivo que yo he llamado cert.pem es la clave privada, sin embargo, otros dicen que eso les funciona. Yo lo envío con este otro código:

Código PHP:
curl_setopt($chCURLOPT_POST1);
curl_setopt($chCURLOPT_RETURNTRANSFER1);
curl_setopt($chCURLOPT_HTTPHEADER$cabeceras);
curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
curl_setopt($chCURLOPT_SSL_VERIFYHOST2);
curl_setopt($chCURLOPT_SSLCERTTYPE"PEM");
curl_setopt($chCURLOPT_SSLCERT,$camino.'cert.pem');
//curl_setopt($ch, CURLOPT_SSLKEY, $certs['pkey']);
curl_setopt($chCURLOPT_SSLKEYPASSWD$pass);
curl_setopt($chCURLOPT_SSL_VERIFYPEER1);
curl_ 
Al parecer es el indicado para el formato pem según dice la documentación oficial de PHP. Aquí no responde nada el servidor de la Diputación, absolutamente nada.

Por puesto he preguntado a la diputación y no parecen saber nada.

¿Qué estoy haciendo mal? ¿Qué no he entendido? ¿debo limpiar el archivo pem que he creado de código como "-----BEGIN PRIVATE KEY-----" o "Bag Attributes"? ¿no lo debo hacer en mi ordenador sino directamente en el servidor por aquello del "localKeyID"?

Yo tuve un problema hace poco con mi certificado porque se revocó el que estaba usando y tuve que poner otro nuevo. Te pongo lo que hice porque también me daba error 01 las primeras veces por culpa del .pem que generaba.

Yo tengo esto:
Código PHP:
        $soap_do curl_init();
        
curl_setopt($soap_doCURLOPT_URL$url);
        
curl_setopt($soap_doCURLOPT_CONNECTTIMEOUT100);
        
curl_setopt($soap_doCURLOPT_TIMEOUT,        100);
        
curl_setopt($soap_doCURLOPT_RETURNTRANSFERtrue);
        
curl_setopt($soap_doCURLOPT_FOLLOWLOCATIONtrue);
        
curl_setopt($soap_doCURLOPT_SSL_VERIFYPEERfalse);
        
curl_setopt($soap_doCURLOPT_SSL_VERIFYHOSTfalse);
        
curl_setopt($soap_doCURLOPT_USERAGENT'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');
        
curl_setopt($soap_doCURLOPT_POST,           true );
        
curl_setopt($soap_doCURLOPT_SSLCERT,        $pem);
        
curl_setopt($soap_doCURLOPT_POSTFIELDS,     $xml);
        
curl_setopt($soap_doCURLOPT_HTTPHEADER,     $header_soap);

        
$xmlResponse curl_exec($soap_do); 
donde $pem es mi path a a mi certificado.pem
Este lo he creado asi:
Código PHP:
openssl pkcs12 -in path.p12 -out newfile.crt.pem -clcerts -nokeys
openssl pkcs12 
-in path.p12 -out newfile.key.pem -nocerts -nodes    
openssl pkcs12 
-in path.p12 -out newfile.pem -nodes 
El newfile.pem final es el que he usado y ahora me manda bien las facturas.
Responder Con Cita