¿Cómo instalar un certificado SSL en un servidor en amazon EC2 con nginx?


Desde hacer algunos años la mayoria de mis proyectos usamos servidores en amazon EC2 y nginx, en un 80% de ellos tenemos configurado un certificado SSL, en este tutorial vamos aprender como instalar un cerficiado SSL con nginx y algunos errores comunes que pasan en safari mobile, que en algunas ocaciones desde IOS o una APP de ios nunca se puede hacer un requests exitoso por la mala configuración.

1.- ¿Donde comprar un certificado SSL?

La mayoria de los cerficados son buenos todos usan el mismo Key Size: 2048 bits (recomendado) en lo personal los SSL que adquiero lo hago a través de goddady (siempre estan en promoción) y compramos para 5 sitios pero cualquier otro proveedor es bueno.

2.- ¿Como crear el archivo CSR?

Antes de poder pedir un certificado SSL, debe generar un CSR (Certificate Signing Request) para el servidor. La CSR es un cuerpo de texto cifrado. Su CSR contendrá información codificada específica para su compañía y el nombre de dominio, información que se conoce como un nombre completo o DN.

aqui una herramienta online para generar el CSR vamos hacer un ejemplo creando un SSL para herelodin.com recuerda si quieres mostrar www deberas agregar el www en el nombre común.

hacemos clic en el boton generar y copiamos el codigo del lado derecho y lo pegamos en nuestra terminal.

hasta este punto ya tenemos el archivo CSR y el archivo KEY recuerda resguardar estos dos archivos ya que el archivo .key es la llave para desencriptar la información que viaja a través del navegador.

Si usamos godaddy vamos a configurar el certificado e ingresamos el codigo del archivo CSR

 

3.- Validar propiedad del dominio

Una vez que ingresamos el codigo del CSR ahora debemos validar que el dominio es nuestro, en algunas ocaciones debemos agregar un registro TXT en los dns con el valor que el proveedor proporciona.

4.- ¿Cómo configurar nginx con un certificado SSL ?

Ya tenemos nuestro certificado SSL y es muy probable que tenemos 2 archivos con la extensión .crt ahora debemos crear el bundle de estos dos certificados para esto usamos el siguiente comando.

cat 7db049d4db877ee5.crt gd_bundle-g2-g1.crt > bundle-herelodin.crt

Subimos el archivo .key y el bundle-herelodin.crt a nuestro servidor de amazon EC2 para configurar nginx.

server{
    server_name herelodin.com;
    listen              80;
    return 301 https://$host$request_uri;
    root /usr/share/nginx/html;
    index index.html index.htm;
}

server{
        server_name herelodin.com;
        ssl    on;
        access_log on;
        listen 443  ssl spdy;
        ssl_certificate    /home/ubuntu/ssl/herelodin.com/bundle-herelodin.crt;
        ssl_certificate_key /home/ubuntu/ssl/herelodin.com/herelodin_com.key;
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        ssl_prefer_server_ciphers on;
        ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;

        root /usr/share/nginx/html;
        index index.html index.htm;
}

¿pero que hace exactamente esta configuración?

  1. todo lo que entre en el protocolo http hacemos un redirect temporal (301) a https
  2. escuchamos el puerto 443 (que debe estar abierto en la configuración de amazon EC2)
  3. añadimos la url del certificado ssl_certificate
  4. añadimod la url del archivo key ssl_certificate_key que se encarga de decodificar todas las peticiones que llegan a travez del navegador.

las siguientes lineas  agregamos el cache y los protocolos, si en IOS safari no se visualiza o solo se ve en blanco, con esto lo podemos solucionar

ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        ssl_prefer_server_ciphers on;
        ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;

puedes revisar la documentación completa aqui

Gracias por leer y compartir este post, te recomiendo algunos libros que me ayudaron a mejorar las buenas practicas.