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

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

Estructura básica de una página en PHP
Instalar y configurar Apache y PHP en Fedora
Usar un bot de Telegram como monitor de servidores Linux
Instalar y configuracion simple de Apache en Linux Mint
Forzar a un sitio para mostrar o no el www

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.

COMMENTS

WORDPRESS: 0