Instalar certificado SSL de Godaddy en NGINX por terminal Linux Debian 7 x64

16 Nov

Cuando se guardan los datos de un usuario en alguna página, es necesario añadir seguridad, uno de los métodos obligados es la encriptación de la información con algún algoritmo criptográfico, el más común, eficaz y fácil de instalar es el ssl, es decir asegurar el sitio mediante el protocolo HTTPS.

Algunos paneles de administración de servidores como CPanel o Plesk nos facilitan el trabajo, pero algunos servidores no cuentan con esta herramienta, entonces voy a realizar esta tarea por ssh, tambien lo hago porque me gusta llevar mi vida al límite 😛

¿Que necesitamos?

  • Acceso por ssh al servidor.
  • Una cuenta en godaddy.com
  • Un dominio y dinero para comprar el certificado.
  • Permisos de superusuario.

Comenzamos por hacer login al servidor y escalamos a root:

$ssh elhui2@dominio.com
elhui2@dominio.com's password:
$su
Password:

Dentro del server nos dirigimos al folder del usuario “dueño” del sitio (Que no sea el folder público del sitio) y creamos un directorio llamado cert.

#cd /home/elhui2/
#mkdir cert

Aquí es donde comienza la magia, vamos a crear nuestras llaves para enviarlas a godaddy, ellos van a validar el certificado y a verificar que la conexión al sitio sea segura.

#openssl req -new -days 365 -nodes -keyout dominio.com.key -out dominio.com.csr

Después de ejecutar el comando van a solicitar información como país, nombre de la compañía bla, bla, bla. Solo hay que poner atención en esto:

Common Name (e.g. server FQDN or YOUR name) []:dominio.com

En Common Name recomiendo que pongan el nombre de dominio “dominio.com”. Esto nos va a generar dos archivos: dominio.com.key y dominio.com.csr.

Vamos imprimir el contenido del certificado.

#cat dominio.com.csr

Y esto nos arrojará el un resultado parecido a esto:

-----BEGIN CERTIFICATE REQUEST-----
MIIDPDCCAiQCAQAwga8xCzAJBgNVBAYTAk1YMQ8wDQYDVQQIDAZNZXhpY28xEjAQ
BgNVBAcMCU5hdWNhbHBhbjEfMB0GA1UECgwWVmFybGFjaGVhIENvbXVuaWNhY2lv
bjETMBEGA1UECwwKVGVjbm9sb2dpYTEdMBsGA1UEAwwUc21hcnRlbnRpdGxlbWVu
dC5jb20xJjAkBgkqhkiG9w0BCQEWF2RhbmllbC5odWkyODdAZ21haWwuY29tMIIB
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAq7kshIQuInz5gKRBic2cnRI6
ALfvHdspmG1No1o9teJ1BTqSQ50gT7iMmXIfWa7P5voXOgi+1hr9ali09hEwh/mQ
a1MmkDQ0sYzGDk3W4+9p91cKUMKcOP+654J3y9dhAal8goXiqWAXUxMBtQldJKbW
gFizlsxL1pEq/R3CxNfS4xplX0T8RMDqjvfDd0TIpOXKwLZiMnYcF5ClSoM5aFqC
gPD2nBShElPSPfhaqqfP1ZNX1mJoFa7arCjAkKDqT1vJFUUVcmgMlxMYVoUlQafd
k4n5xWP1s4JWAnCC82intxwTROfuX53+CmLFH+0gzva8rv0z9KXd70fBsE6kRQID
AQABoEcwHgYJKoZIhvcNAQkHMREMD1ZhcmxhY2hlYTA5MTEyMDAlBgkqhkiG9w0B
CQIxGAwWVmFybGFjaGVhIENvbXVuaWNhY2lvbjANBgkqhkiG9w0BAQUFAAOCAQEA
TTYUQbkQkteEXdLTfux19ChMGZKt2ch2PBPV4VRyBHqjQGivxX9TbVSygePvJMZ5
oUULmWcPT0sdAfgPZgNFiH9mUMnlny6MgsJFrDPy+mQtJCWJ0E6159UScRSm2mnV
mjY5gx1yHIW7tM8gc2I8r6SoLIjENmKgeG81G3jLkI9gExI+dN/KUYJ492rAAD7/
cSPH5ZQvJmtjEJIUIu5si/zE8RAceqh22WDaCraeulcRKrRU7tnGznCodXp7Rl9Z
SXzts+WiELtcpt56CJlL0mrp6iZzl6y8qsJi6XLSDc4AWGDx9tuXt90Zm34lwaTM
zy7jrVhhNDwA8wW9X8Bppg==
-----END CERTIFICATE REQUEST-----

Copiamos este resultado y lo pegamos en algún archivo de texto.

Bien tenemos que hacer login en godaddy, pagar el certificado y terminando todo ese rollo, vamos al administrador en godaddy.com del certificado.

certificado ssl godaddy

En el cuadro que marque con rojo necesitamos pegar el certificado que guardamos en un archivo de texto, tal como esta arriba (Obviamente el que ustedes crearon). Después de un par de horas ya podemos hacer la descarga.

Descarga del certificado ssl estandar goddaddy

La descarga es un archivo zip y dentro contiene dos ficheros 2b293d53259048.crt y gd_bundle-g2-g1.crt estos dos hay que subirlos al directorio donde creamos las llaves anteriores, en este caso /home/elhui2/cert/

Vamos a entrar otra vez por ssh al servidor:

$ssh elhui2@dominio.com
elhui2@dominio.com's password:
$su
Password:

Y nos dirigimos nuevamente al directorio cert.

#cd /home/elhui2/cert/

Bien, tenemos que hacer una llave combinando los dos archivos que acabamos de subir.

#cat 2b293d53259048.crt gd_bundle-g2-g1.crt > dominio.com.crt

cambiamos los permisos de los archivos por si las moscas:

#chmod 400 *

Ya tenemos los certificados, lo unico que necesitamos es modificar nuestro Host Virtual en el servidor, nos dirigimos hasta /etc/nginx/sites-available y editamos el archivo de configuración del host virtual.

#cd /etc/nginx/sites-available/
vi dominio.com

De todo el chorizo que había en el archivo de configuración del host virtual de nginx el mio quedo así:
Nota:Saca un backup de este archivo y si tu sitio tiene una configuración especial es necesario agregarla.

server {
    listen 80;
    server_name dominio.com;
    return 301 https://dominio.com$request_uri;
}
server {
    listen   443;
    server_name dominio.com;
    access_log /home/elhui2/log/access.log;
    error_log /home/elhui2/log/error.log;
    root   /home/elhui2/www;
    index index.php index.html index.htm;

    ssl on;
    ssl_certificate /home/elhui2/cert/dominio.com.crt;
    ssl_certificate_key /home/elhui2/cert/dominio.com.key;

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

    location ~\.php$ {
	try_files $uri =404;
	fastcgi_pass unix:/var/run/php5-fpm.sock;
	fastcgi_index index.php;
	fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
	include fastcgi_params;
    }
}

Faltan algunos parametros en la configuración del host virtual, pero pongo lo mas básico para trabajar por ssl. Por obvio que sea, es necesario aclarar que el puerto 443 debe estar abierto en nuestro cortafuegos.

Y eso es todo, solo reiniciamos nginx y php-fpm.
Saludos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Eres un robot? * Time limit exceeded. Please complete the captcha once again.