Activar ssl en nginx con certificado autofirmado

Para las pruebas se utilizo una maquina Ubuntu 12.04 LTS.

si no se tiene instalado nginx se puede hacer facilmente desde consola con el comando:

sudo apt-get install nginx

El algoritmo de generacion es:

  • Generar una llave
  • Crear CSR (Certificate Signing Request)
  • Firmar certificado usando la llave privada y el  CSR

Crear un directorio para ssl

 cd /etc/nginx/
 mkdir ssl
 cd ssl

Creacion de la llave

openssl genrsa -out server.key 2048

Creacion de CSR

$ openssl req -new -key server.key -out server.csr

Finalmente firmarlo

$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Aqui se firmo el certificado con una duracion de 1 año

Ahora queda configurar el nginx copia el fichero de default para crear uno nuevo

cp /etc/nginx/sites-available/default /etc/nginx/sites-available/ejemplo

luego se edita este archivo con los parametros que hemos puesto principalmente como se llama el dominio y las rutas de ssl

nano /etc/nginx/sites-available/ejemplo

Se puede dejar para que quede habilidado el puerto 80 y el 443

  # HTTPS server
#
server {
        listen 443;
        server_name example.com;

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

        ssl on;
        ssl_certificate /etc/nginx/ssl/server.crt;
        ssl_certificate_key /etc/nginx/ssl/server.key;

        ssl_session_timeout 5m;

        ssl_protocols SSLv3 TLSv1;
        ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
        ssl_prefer_server_ciphers on;

        location / {
listen 443;
        server_name example.com;

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

        ssl on;
        ssl_certificate /etc/nginx/ssl/server.crt;
        ssl_certificate_key /etc/nginx/ssl/server.key;

        ssl_session_timeout 5m;

        ssl_protocols SSLv3 TLSv1;
        ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
        ssl_prefer_server_ciphers on;

        location / {
                try_files $uri $uri/ /index.html;
        }
}

Configuracion HTTPS de ejemplo, luego se reinicia nginx

service restart nginx