Ver contenido
carlosazaustre.es carlosazaustre.es

Cómo instalar un Servidor HTTPS en Nginx desde cero

🗓 | 💻 Desarrollo | 🕐 2 minutos de lectura | 💬 Comments

Cuando en nuestra web o aplicación necesitamos tratar con datos sensibles como pueden ser tarjetas de crédito, cuentas de usuario, etc, es recomendable disponer de un certificado SSL en nuestro servidor para utilizar el protocolo HTTPS (Http Seguro) en lugar del HTTP normal. De esta manera, nuestros datos viajan encriptados en la aplicación y es mas difícil que sean “escuchados” por otros.

nginx https ssl

Para el proyecto que estamos llevando a cabo mi compañera Paola y yo, Chefly (Del que pronto empezaréis a oir) necesitamos disponer de HTTPS y tras pelearme un rato con su configuración conseguí ponerlo en marcha. Este tutorial espero que os ayude y os ahorre tiempo a la hora de implementarlo en vuestros servidores.

En nuestro caso, nuestro servidor es una instancia EC2 en Amazon Web Services con Ubuntu 14.04 LTS, y como servidor web/proxy utilizamos Nginx.

Lo primero que necesitamos es crear una clave privada en nuestro servidor:

Con nuestra clave privada generada, creamos un Certificate Signing Request (CSR) para solicitar nuestro certificado SSL a una entidad de autorización reconocida, en nuestro caso optamos por RapidSSL.

Este proceso nos pedirá una serie de datos que son importantes para solicitar el certificado SSL:

  • Country Name (C): Un código de dos letras para determinar el país, en nuestro caso ponemos US ya que la entidad que lo va a manejar (RapidSSL) es de Estados Unidos.
  • State or Province (S): Estado o provincia, este campo puede quedar vacío
  • Locality or City (L): Localidad o ciudad, también se puede dejar vacio.
  • Organization (O): Nombre de la organización que maneja tu certificado SSL, en nuestro caso RapidSSL opera a través de GeoTrust, Inc. y ponemos ese nombre.
  • Common Name (CN): Nuestro nombre de dominio, tudominio.com. sin las www delante.

Esto nos generará un archivo CSR que debemos subir a RapidSSL cuando solicitemos y compremos un certificado SSL. Una vez comprado, RapidSSL nos enviará a nuestro email el certificado, que deberemos copiar y pegar en un fichero de texto con el nombre SSL.crt para seguir la nomenclatura de Nginx.

Desde la página de RapidSSL necesitamos también descargarnos un certificado intermedio, lo guardamos como intermediate.crt y debemos concatenar al anterior

Con esto ya tenemos lo necesario para que nuestro servidor web, acepte HTTPS, solo tenemos que configurar Nginx para que escuche en el puerto 443 (el de HTTPS) indicándole los ficheros.

Editamos el fichero default de configuración con lo siguiente:

Reiniciamos nginx y nos aseguramos que en nuestro DNS, tudominio.com apunta a la IP o alias de nuestro servidor

Con todo esto si accedemos a https://tudominio.com funcionará, pero ¿Y si entramos desde http://tudominio.com? No nos redirije al HTTPS, ¿Y si escribimos www.tudominio.com? aunque lo tengamos definido en nuestro DNS, no nos redirije al HTTPS. ¿Cómo arreglamos esto? Añadiendo más reglas a nuestro archivo de configuración de Nginx:

Con esto ya tendremos todas las opciones cubiertas y podremos hacer uso del protocolo seguro de HTTP en nuestro servidor.

Fuentes:

✎ ¿Ves alguna errata? ¿Quieres modificar algo? Haz una Pull Request.

Carlos Azaustre

Soy Carlos Azaustre. Desarrollador web desde hace más de 8 años. He trabajado en Google, IBM y Eventbrite. Soy GDE (Google Developer Expert) en Tecnologías Web. Desde 2013 intento documentar en éste blog todo lo que aprendo y así compartirlo con el resto de la comunidad.

📬 Únete y estate al día en desarrollo web

Recibe puntualmente información sobre las últimas novedades en tecnologías web y desarrollo web moderno para que estés siempre actualizadx:

🔒 Libre de Spam. Sólo contenido que te interesa..