Cadenas de certificados y validación extendida SSL en servidores web Apache

En un principio cuando configuramos un VirtualHost por HTTPS en el servidor web Apache se suelen especificar dos directivas básicas, correspondientes al certificado y su respectiva clave privada. Por ejemplo:

SSLCertificateFile "/usr/local/apache/conf/certificado.cer"
SSLCertificateKeyFile "/usr/local/apache/conf/clave.key"

Con esta configuración -básica- cuando un cliente entra en la página web en cuestión desde el servidor se le presentará únicamente el certificado SSL que asegura que esa página es la que dice ser (concepto básico de securización SSL) pero no podrá comprobar toda la cadena de certificación hasta la autoridad de confianza raíz pasando por las autoridades intermedias (si las hubiera). Es decir, no podrá comprobar la ruta de certificación. Para ello tendremos que añadir la siguiente directiva:

SSLCertificateChainFile "/usr/local/apache/conf/chain.crt"

Chain .crt deberá contener toda la cadena de certificados, desde el certificado de nuestro servidor hasta el raíz. Normalmente cuando se realiza la firma se puede descargar tanto el certificado como la cadena si la CA es de Microsoft. Eso sí, vendrá en formato p7b y tendremos que convertirla a formato PEM (reconocido por Apache) con OpenSSL:

openssl pkcs7 -print_certs -in chain.p7b -out chain.crt

Hay otra manera de hacerlo: si tenemos los certificados de toda la cadena, considerando que hubiera, por ejemplo:

  • Certificado CA raíz (CARoot.crt)
  • Certificado CA intermedio (CAint.crt)
  • Certificado CA servidor (CAserver.crt)

Los podríamos concatenar simplemente con:

cat CARoot.crt CAint.crt CAserver.crt >> chain.crt

Presentar la cadena al cliente es especialmente útil si queremos darle la posibilidad de que importe una CA raíz que es local y concreta para una organización y así confiar en los subsiguientes certificados que expida esa CA. Puedes comprobar si el servidor te envía la cadena fácilmente: en Firefox, haz click en el “candado” que aparece al lado de la URL:

validacion_extendida_ssl

Después en Más información → ver certificado → detalles. Verás la jerarquía de certificados:

jerarquia_certificados_firefox

También por otro lado es necesario especificar la cadena de certificación completa para tener validación extendida (en caso de que nuestro certificado sea de este tipo), que a grandes rasgos puedes ver en alguna web cuando el candado aparece en color verde, como te he enseñado en una imagen anterior:

validacion_extendida_ssl2

Ojo, no digo que especificando la cadena vayamos a tener validación extendida, sólo que si nuestro certificado es de ese tipo, tendremos que hacer las modificaciones pertinentes en el servidor Apache para incluir la cadena de certificación completa hasta la CA raíz.