Bueno creo que he resuelto el problema del certificado. Os dejo aquí los pasos que he seguido para hacerlo funcionar:
1. Me he conectado con firefox a la web https:xxx y he exportado el certificado en formato
X.509 Certificate (PEM) guardandolo con el nombre
certificado.crt.
Para exportar el certificado solo es necesario hacer click con el botón derecho sobre la web y elegir
View Page Info (tengo el firefox en inglés) . Después seleccionamos la pestaña
Security y
View Certificate. En la pestaña
Details seleccionamos el item padre (el de más arriba de todos) en
Certificate Hierarchy y pulsamos el botón
export de más abajo.
2. He copiado el fichero .crt al directorio raíz de la aplicación en php
3. He modificado el código php que ha quedado tal que así:
Código PHP:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->_url );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_TIMEOUT, 15 );
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers );
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true );
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2 );
curl_setopt($ch, CURLOPT_CAINFO, getcwd().'/certificado.crt' );
curl_setopt($ch, CURLOPT_POST, 1 );
curl_setopt($ch, CURLOPT_POSTFIELDS, utf8_encode( $msg ) );
$data = curl_exec( $ch );
$error = curl_errno( $ch );
curl_close( $ch );
Y eso es todo, ya puedo autentificar el servidor y poder enviarle información.
Un saludo.