Configurando HTTPS + NGINX + PositiveSSL de Comodo

Después de asistir a la livestream del Chrome Dev Summit en el CodeNode aquí en Londres me quedé pensando en la importancia del HTTPS:

Además, tal y como explican, Chrome requerirá HTTPS si queremos acceder, por ejemplo, a la cámara del usuario. Así que como ejercicio, he decidido pasar la landing de filmit.watch y me gustaría compartir el proceso.

En el vídeo hacen referencia a https://sslmate.com/ que es una herramienta con la que puedes comprar y configurar un certificado desde la línea de comandos pero en este caso, he optado por comprar el certificado PositiveSSL de Comodo con Namecheap. He elegido ese Certificado porque según la descripción y precio, se adapta a la naturaleza del site.

Los pasos que he seguido han sido:

  1. Comprar el Certificado SSL
  2. Generar nuestro CSR (Certificate Signing Request)
  3. Activar el Certificado SSL adjuntando el CSR
  4. Configurar NGINX

Después de pasar por caja, tenemos que generar nuestro certificado CSR. En mi caso, como tengo alojada la app en Digital Ocean (Ubuntu 14.04) he seguido el procedimiento que describe Comodo:

openssl req -nodes -newkey rsa:2048 -keyout myserver.key -out server.csr

Este comando nos general las claves pública y privada después de completar el prompt de preguntas sobre quiénes somos. Recordemos que la clave privada es eso, privada ;-)

Image for post
Image for post

En Common Name debemos especificar el FQDN (fully-qualified domain name) que consta del second-level domain name, subdomains y label.

Para activar el certificado en Namecheap vamos al Dashboard > Product List > Activate

Image for post
Image for post

Rellenamos los campos y pegamos el contenido del fichero .csr. Al momento veremos que se completan los campos Email, Company, Department y Location.

El siguiente paso es demostrar que tenemos autorización sobre el dominio. Podemos elegir entre tres métodos de verificación: que nos envíen los certificados a una dirección de correo del dominio que queremos securizar, subiendo un .txt que nos proporciona Namecheap al servidor para que sea accesible en www.filmit.watch/file.txt o mediante la creación de un registro CNAME en la configuración DNS del dominio. Yo he elegido subir el txt.

Una vez que la verificación se haya completado de forma correcta, nos llegará un mail desde Comodo con un zip con dos ficheros: mydomain.bundle y mydomain.crt. Debemos unir el contenido de esto dos ficheros y subir el resultante al servidor.

cat mydomain.crt mydomain.bundle > ssl-bundle.crt

En nuestro server debemos tener alojados el fichero .key y el ssl-bundle.crt (el unificado) para poder hacer referencia a sus rutas en el fichero de configuración de Nginx:

Nos podemos ayudar del comando nginx -c /etc/nginx/nginx.conf -t que nos dirá si el fichero contiene algún error como por ejemplo:

> nginx -c /etc/nginx/nginx.conf -t
nginx: [warn] invalid value "ssl_ciphers" in /etc/nginx/sites-enabled/filmit:42
nginx: configuration file /etc/nginx/nginx.conf test failed

Una vez hecho el enlace simbólico de este fichero en /etc/nginx/sites-enable podemos reiniciar el servicio:

> service nginx restart
Image for post
Image for post

Esta ha sido mi solución, si he cometido algún error o no te importa aportarme una mejor solución, sería genial leerte ;-) ¡Gracias!

Written by

Software dev

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store