Hace unos días atras vimos como hacer una instalación de certificados SSL en cPanel utilizando AutoInstall SSL. ¿Pero qué sucede cuando no hay un panel de control en nuestro servidor y lo manejamos todo por consola? Hoy veremos justamente eso, cómo instalar un SSL en un servidor Linux sin panel de control, es decir, basándonos enteramente en la terminal o shell Linux.
Para esto necesitarás unos conocimientos mínimos de la consola, como por ejemplo conectar via SSH como root y claro está, tener un servidor web instalado como Nginx por ejemplo.
Primer paso: Comprar el Certificado
El primer paso a realizar es ir la página de certificados SSL de Infranetworking, y comprar un Positive SSL, que cuestan tan sólo $27,50 dólares/año y nos permiten cifrar cualquier tipo de sitio web, sea una tienda, blog o una web corporativa/empresarial.
Haciendo click en el botón Contratar te llevará al carro de compras, donde luego sólo restará que pagues por el SSL. Una vez listo ya tendremos todo a nuestra disposición para comenzar la instalación del SSL.
Segundo paso: Generación de código CSR
El segundo paso que incluye la instalación de un certificado SSL es generar el famoso código CSR.
La llave CSR o código CSR es una llave que se genera desde el servidor donde hospedamos nuestra web, y que es el paso inicial para lograr cifrar nuestra web bajo HTTPS.
Para generarla, simplemente seguiremos estos pasos:
Ingresa como root a tu servidor via SSH utilizando este comando:
ssh -p PUERTO root@XX.XX.XX.XX
«PUERTO» es el puerto SSH de tu servidor, puede ser 22 que es el que viene configurado por defecto, o bien ser otro diferente. Si no lo sabes, prueba con el 22 y luego si ese falla, puedes preguntar a tu proveedor de hosting cuál es el puerto.
«root» es el usuario de sistema, puede ser también usuario primario para luego convertirte en root utilizando el comando ‘su -‘, o bien puede ser el usuario root. Como primer medida, prueba usar root.
«XX.XX.XX.XX» es la IP de tu servidor, asegúrate de reemplazar esta IP por la real de tu servidor.
Una vez ya estamos conectados, haremos uso de una herramienta de Linux llamada openssl, corriendo el siguiente comando:
openssl req -nodes -sha256 -newkey rsa:2048 -keyout /etc/nginx/ssl.key/tusitio.net.key -out /etc/nginx/ssl.csr/tusitio.net.csr
Lo que tenemos que cambiar en ese comando será la ruta de dos cosas: el archivo .key y el .csr. Eso lo puedes personalizar como gustes, en este caso la ruta que especificamos es la que usamos en muchas instalaciones de SSL en Infranetworking, donde se especifica un directorio para guardar llaves .key y otra para certificados .csr.
Luego de eso, verás algo como esto:
writing new private key to '/etc/nginx/ssl.key/tusitio.net.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. -----
Y seguido de ello, te pedirá esta información que debes llenar, estos son datos de ejemplo.
Lo más importante, NO uses tildes, eñes, acentos o símbolos en la información de ciudad, estado, pais o datos de tu organización o la generación del CSR fallará.
Donde dice Email Address: siempre especifica webmaster@tusitio.net, que luego será usada para validar todo.
En el campo «common name», se debe ingresar el nombre de tu sitio con o sin www según lo uses actualmente, aunque el certificado será válido para ambos hosts (con y sin www).
El campo «Organizational Unit», puedes simplemente especificar «SSL».
El resto de los campos se ven claramente en este ejemplo, es pura información.
Country Name (2 letter code) [XX]: MX State or Province Name (full name): Mexico DF Locality Name (eg, city) [Default City]: DF Organization Name (eg, company) [Default Company Ltd]: Mi Sitio Organizational Unit Name (eg, section): SSL Common Name (eg, your name or your server's hostname): tusitio.net Email Address: webmaster@tusitio.net
Please enter the following 'extra' attributes to be sent with your certificate request A challenge password: unpassword An optional company name: mi sitio web
Tercer paso: Validación de CSR
Para validar nuestro archivo .csr generado necesitaremos:
- Correr este comando desde la consola:
cat /etc/nginx/ssl.csr/tusitio.net.csr
Esto te mostrará el código CSR de tu certificado SSL, copialo desde la primer letra hasta la última.
- Ingresa a tu área de cliente en https://www.infranetworking.com/ingresar
- Luego ve a Servicios – Mis Servicios.
- Allí verás un servicio llamado ‘Positive SSL’, hazc lick en él.
- Clic en ‘Generate Now’, para configurar tu SSL y validar el CSR.
- Elige ‘Apache + Mod_SSL’ (incluso si usas Nginx).
- En la opción «Domain Verification Options», elige la casilla: webmaster@tusitio.com, pues allí será enviada la validación del dominio.
Cuarto paso: Valida tu dominio
Luego de enviar el código CSR recibirás un par de emails a la casilla webmaster@tusitio.com que contienen la validación para que sepamos que tu eres el propietario de la web que quieres certificar.
- En uno de los mails, obtendrás un link que dice así: «To permit the issuance of the certificate please browse here»
- Luego hacemos click en el enlace que hay en la palabra «here».
- Aparecerá un campo de texto donde ingresaremos el código que nos llegó en el mismo email más abajo.
- Y finalmente, si ingresamos bien el código podremos recibir la confirmación:
You have entered the correct Domain Control Validation code. Your certificate will now be issued and emailed to you shortly.
Quinto paso: Instala tu código CRT
En esta etapa ya deberías tener el código .crt en tus manos, y ahora sólo resta instalarlo en tu servidor.
- En este momento debemos esperar unos 2 minutos y llegará a nuestra casilla webmaster@tusitio.com un email con este asunto:
ORDER #XXXXXXXX – Your PositiveSSL Certificate for tusitio.com
- Dentro encontrarás un archivo .zip que incluye varios archivos, como estos que ves aquí en la captura.
- Abre cada uno de los archivos y ve copiando y pegando el contenido de ellos en un nuevo archivo en tu servidor en este orden:
nano -w /etc/nginx/ssl.crt/tusitio.com.crt
- Primero pega el contenido del archivo llamado ‘tusitio.com.crt’, luego de eso haz lo mismo con ‘COMODORSADomainValidationSecureServerCA.crt’, de inmediato el contenido de ‘COMODORSAAddTrustCA.crt‘, luego el ‘AddTrustExternalCARoot.crt’.
- Luego de eso, cerramos y guardamos el archivo.
- Editamos la configuración de nuestro virtual host en el servidor web:
nano -w /etc/nginx/conf.d/tusitio.com.conf
Y agregamos estas líneas:
listen XX.XX.XX.XX:443 ssl http2; resolver 8.8.4.4 8.8.8.8 valid=300s; resolver_timeout 10s; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers On; 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; ssl_certificate /etc/nginx/ssl.crt/tusitio.com.crt; ssl_certificate_key /etc/nginx/ssl.key/tusitio.com.key;
Donde «XX.XX.XX.XX» es una IP dedicada que te sugerimos que tengas asignada al sitio. Si no tienes una IP dedicada en tu sitio, te sugerimos solicitar una a nuestro departamento de Administración abriendo un ticket desde tu área de cliente.
Debes especificar las rutas de tus archivos .crt y .key en las variables ssl_certificate y ssl_certificate_key.
La configuración completa de Nginx con una redirección 301 del sitio sin WWW y con WWW hacia la versión https debería lucir parecido a esto:
server { listen XX.XX.XX.XX:80; server_name tusitio.com www.tusitio.com; location / { return 301 https://www.tusitio.com$request_uri; } } server { access_log off; log_not_found off; error_log logs/tusitio.com-error_log crit; server_name www.tusitio.com tusitio.com; root /var/www/tusitio.com; index index.php index.html index.htm; # Configuración SSL listen XX.XX.XX.XX:443 ssl http2; resolver 8.8.4.4 8.8.8.8 valid=300s; resolver_timeout 10s; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers On; 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; ssl_certificate /etc/nginx/ssl.crt/tusitio.com.crt; ssl_certificate_key /etc/nginx/ssl.key/tusitio.com.key; # Cerramos Config SSL ... ... ... ... }
Reiniciamos Nginx luego de configurar todo a nuestro gusto:
service nginx restart
Sexto paso: Verifica tu SSL
Verifica que el SSL funciona bien, para esto puedes usar lugares como https://www.ssllabs.com/ssltest/ donde podrás probar si tu SSL carga de manera correcta o si hay algunas advertencias sobre algo mal en la instalación.
Al final, si instalaste todo correctamente y las opciones de seguridad de tu SSL están bien configuradas en el servidor web deberías ver un resultado parecido a este:
Si obtienes una nota B o C, quiere decir que tu SSL está instalado pero que requiere de algunas configuraciones manuales para mejorar su seguridad. Contacta con nuestro Soporte Técnico y con gusto te ayudaremos a llegar a la nota A.
Y si tienes un servidor con Windows Server, recuerda visitar esta guía: Instalación de Certificado SSL en Windows Server.
¿Tienes dudas o consultas sobre la instalación tras seguir este manual? Contactanos abriendo un ticket desde tu área de cliente, con gusto te ayudaremos.