Convertir un certificado .cer al formato .pem y hacer el envío desde PHP

 

Cuando en nuestro sistema web necesitamos enviar un certificado digital para demostrar que somos un emisor válido, tenemos normalmente un archivo .cer, el cual no es compatible con el servidor Apache, por lo que debemos convertirlo a un formato compatible, el cual sería .pem.

Para realizar la conversión se necesitará openssl, el cual ya viene instalado en la mayoría de las distribuciones de Linux. El comando es el siguiente.

openssl x509 -inform der -in certificado.cer -out certificado.pem

Si hay que realizar el envío o la conexión desde PHP, podemos utilizar CURL para realizarlo.

$process = curl_init();
curl_setopt($process, CURLOPT_URL, $url);
curl_setopt($process, CURLOPT_PORT , 443);
curl_setopt($process, CURLOPT_VERBOSE, 1);
curl_setopt($process, CURLOPT_HTTPHEADER, array('Content-Type: text/xml', 'charset=utf-8'));
curl_setopt($process, CURLOPT_POSTFIELDS, $xml);
curl_setopt($process, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($process, CURLOPT_SSL_VERIFYHOST, 2 );
curl_setopt($process, CURLOPT_SSLCERT, realpath($certificado));
curl_setopt($process, CURLOPT_SSLCERTPASSWD, $clave);
curl_setopt($process, CURLOPT_RETURNTRANSFER, true);
curl_setopt($process, CURLOPT_TIMEOUT, 15 );
curl_setopt($process, CURLOPT_POST, true);
$return = curl_exec($process);

Donde

  • $url: Es la variable que contiene la dirección del webservice a donde se conectará y enviará un XML
  • $xml: Es la variable donde previamente se ha cargado o almacenado el XML que se requiere enviar al webservice
  • $certificado: Es la ruta del certificado en formato .pem
  • $clave: Es la contraseña del certificado

Si queremos ver en bruto la respuesta del webservice se puede hacer de la siguiente manera

header("Content-Type: text/plain");
var_dump($return);

Con lo cual podremos visualizar en pantalla toda la respuesta del webservice, para poder saber como recuperar la información, o si hubo algún error. Cada webservice es diferente, por lo que necesitaremos tener la documentación del mismo para saber el manejo de errores y respuestas.

Author: angelinux

Desarrollador de páginas web desde el año 2000 y con experiencia en programación de sistemas para empresas desde el 2008; cofundador de CONSoluciones; autor del blog de software libre “Angelinux-slack”; docente en maestría en UPAV y fundador de la distribución Linux Falco que está en desarrollo para la Universidad Veracruzana.
Además, ponente, organizador de congreso, laborista social, impartidor de cursos de programación y servidores Linux, webmaster, y ex invitado en programa de televisión.

Deja un comentario