jueves, 19 de noviembre de 2015

Cómo configurar nginx utilizando SSL en Ubuntu 14.04

Cada vez es más importante cuidar los datos de nuestros usuarios, por ende cada vez es más importante que utilicemos técnicas para tratar de proteger esos datos, EN sitios web, una de esas técnicas es usar HTTP sobre SSL el cual es más conocido como HTTPS.

¿Cómo podemos configurarlo?

Depende del sistema operativo que uses y el servidor web, aquí daré las instrucciones para realizarlo con Ubuntu y nginx

Debemos generar una solicitud de certificado (lo que suelen llamar un CSR) para lo cual podemos usar OpenSSL como sigue:

openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr
Donde server representa al nombre de tu dominio.

Al ejecutar esta sentencia comenzará un asistente donde deberás llenar cierta información relacionada al sitio web:

Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

El más importante de todos los datos es el FQDN que traduciéndolo a español criollo viene a ser algo así como EL NOMBRE DE TU DOMINIO (Fully Qualified Domain Name), por ejemplo: www.aguardientico.com, si quisieras crear un certificado para cualquier subdominio dentro de tu dominio (cualquier cosa en lugar del www antes del nombre de tu dominio puedes quitar el www y reemplazarlo por un asterisco (*.aguardientico.com), ese tipo de certificados se los conoce como wildcards.

Luego de terminar el asistente se generan 2 archivos, en el caso del ejemplo:

  • server.key Cúidalo con tu vida, sacale un respaldo, guardalo bien, dado que es la clave privada con la que se podrá cifrar/descifrar el contenido manejado via HTTPS
  • server.csr Es la solicitud de certificado como tal, donde quiera que compres el certificado te pediran este archivo (o su contenido) para generar el certificado como tal.

El siguiente paso es comprar el certificado digital, usa el vendedor que más te guste convenza, el que te alcance o simplemenet busca en tu navegador favorito algo como ssl certificate.

Cuando ya tengas el certificado (un archivo con extensión crt) el siguiente paso es configurar nginx para que lo use para lo cual edita el archivo de configuración de tu servidor y agrega las siguientes líneas dentro de la definición del server:

listen 443 ssl; #para que escuche por el puerto por defecto de https y habilite ssl
ssl_certificate /el/path/al/certificado.crt;
ssl_certificate_key /el/path/a/server.key;

Graba el archivo y recarga la configuración de nginx:

service nginx reload
o
/etc/init.d/nginx reload

Y listó si vas a un navegador y pones https://tudominio.com, deberías poder acceder via https

¿Qué pasa si solo quieres usar https? Fácil, simplemente quita listen 80; de la configuración de tu servidor en nginx
¿Y si no quiero hacer eso porque tengo correos, enlaces, o lo que sea apuntando a http y quiero redirigirlo a https? También fácil, agrega algo como esto a la configuración:
server {
  listen 80;
  server_name tudominio.com;
  rewrite     ^   https://$host$request_uri? permanent;
}

Espero te sea de utilidad