¡Un poco de SSL por favor!

Camarero con copa de SSL

Últimamente, parece que si no tienes una "s" en el sufijo de todo no eres nadie, y sinceramente creo que hemos perdido un poco el norte, los buscadores te bajan calificación si no tienes una conexión cifrada (¡Ojo!, que lo llaman seguro pero quieren decir cifrado, lo de seguro en muchos casos está pendiente de demostrar). Y encima, tenemos el negocio de las autoridades certificadoras, los navegadores incluyen certificados raiz de un montón de entidades de confianza (yanquis ellas) casualmente comerciales, pero rara vez incluyen certificados de organismos oficiales (vease FNMT por ejemplo) o de organizaciones sin ánimo de lucro, por lo que básicamente el candado verde indica que has pagado x dinero al año(para todo x entre 20 y algunos miles de dólares) por tener un certificado firmado en tu servidor. En este artículo vamos a ver como obtener un certificado gratuito de cacert y como instalarlo en nuestro sitio.

CAcert.org es, y cito textualmente:

CAcert.org es una autoridad certificadora dirigida por la comunidad que emite certificados gratuitos al público.

El objetivo de CAcert es promover el conocimiento y la educación sobre la seguridad informática a través del cifrado, ofreciendo específicamente certificados criptográficos. Estos certificados se pueden utilizar para firmar digitalmente y cifrar mensajes de correo electrónico, autenticar y autorizar usuarios que se conectan a sitios web y asegurar la transmisión de datos a través de Internet. Cualquier aplicación que tenga soporte del protocolo Secure Socket Layer (SSL o TLS) puede hacer uso de los certificados firmados por CAcert, así como cualquier aplicación que utilice certificados X.509, pro ejemplo para el cifrado o firmado de código y las firmas digitales en documentos.

Por ello, simplemente tienes que registrarte, verificar tus datos y podrás disponer de certificados firmados un una entidad certificadora, lamentablemente, al no estar incluidos los certificados raiz de CACert en los navegadores comerciales, de cara al usuario final tu sitio web será inseguro (como todos aquellos firmados por la FNMT, es decir, la mayoría de los organismos públicos españoles y aquellos que sacaron los certificados a raiz de campañas de promoción gubernamentales), aunque la comunicación será segura, tendrás un respaldo de un tercero y además, te ayudará a mantener el certificado al día (caducan anualmente y revisan protocolos). Estos pasos con CACert son análogos a cualquier otra entidad certificadora, así que de todos modos servirán de ejemplo.

Suponiendo que ya os habéis registrado, lo siguiente que tenéis que hacer es instalar SSL en vuestro servidor (si venís de otro planeta) y agregar los certificados raiz de CACert a vuestro conjunto de CAs.

Para obtener los certificados e instalarlos en una Debian (en otras distros cambia el path):

wget -P /usr/local/share/ca-certificates/cacert.org http://www.cacert.org/certs/root.crt http://www.cacert.org/certs/class3.crt
update-ca-certificates

Con esto, ya tendremos la CA de CACert en nuestro equipo y podremos utilizarla sin problemas, ahora creamos una nueva solicitud de certificado:

openssl genrsa -out nombredelservidor.key 4096
openssl req -key nombredelservidor.key -new

Al hacer una solicitud, nos pedirá los datos, estos datos son los que muestra el cliente cuando damos a información del certificado, pero, en el caso de CACert, ellos no dan los datos por verificados, así que sólo conservarán el dominio del certificado y la dirección de correo electrónico, el resto de los datos serán eliminados del certificado generado, aún así, por sanidad, no está mal poner los datos, al terminar de introducir los datos, os dará un chorongo de caracteres, esta es la solicitud de certificado o CSR.

Copiáis este chorongo, incluyendo las líneas de inicio y fin:

-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----

Entonces vamos a CACert (os recuerdo que es análogo para los certificados de pago) y hacemos una nueva solicitud de certificado de servidor, le damos el nombre que queramos (y que nos sea útil en el futuro) y pegamos el CSR.

La web de CACert nos devolverá otro chorongo, eso lo pegamos en nuestro servidor en un nuevo fichero "nombredelservidor.crt" y con ese nuevo fichero y los que ya teníamos generamos el certificado:

vi nombredelservidor.crt
cat nombredelservidor.key nombredelservidor.crt certs/CAcert_chain_new.pem certs/CAcert_root_new_Base64.cer > nombredelservidor.pem
#este comando sirve para comprobar el certificado
openssl verify nombredelservidor.pem

ahora editamos un nuevo fichero de configuración de apache para nuestro sitio https, que será igual que el que generamos para el http pero con un par de salvedades:

<VirtualHost *:443>
        ServerName nombredelservidorquecoincideconelnombredelcertificado />         DocumentRoot /var/www
        SSLEngine on
        SSLCertificateFile      /etc/ssl/nombredelservidor.pem
        SSLCertificateKeyFile /etc/ssl/nombredelservidor.key
        SSLCACertificatePath /etc/ssl/certs/

Tened en cuenta, que si no disponéis de un certificado wildcard (es decir, que tenga un *.nombredeldominio) habrá que repetir el proceso para cada uno de los subdominios (incluido www.) y generar un certificado para cada uno.

Con todo esto, ya tenemos nuestro certificado SSL y nuestro servidor seguro, como ya he dicho, los navegadores no incluyen CACert entre sus entidades raiz, por lo que si queréis usarlo sin alertas, o bien incluís vuestro sitio en los sitios de confianza, o bien instaláis el certificado raiz en vuestro navegador. Al final, si todo está bien, el navegador os dará algo así al preguntar por el certificado:

Certificado SSL desde el navegador

Y con esto ya tenemos SSL funcionando, tal y como está ahora no vale de mucho, ya que el certificado no es de fiar, pero ya veremos más adelante como podemos configurar Drupal para que solo sirva como https aquellas páginas que merezcan estar encriptadas y no, el contenido público, incluso veremos como avisar a los usuarios de qué hacer para que el certificado funcione en lugar de mostrar una página de advertencia que siempre da mucho canguelo.

 

Etiquetas