Certificado SSL en Apache Ubuntus

Abril 25, 2018

Certificado SSL en Apache

Como continuación al artículo anterior, donde se explica como configurar varios dominios para una misma IP pública aplicando las configuraciones del Virtual Host de Apache, ahora se procederá a “instalar” un certificado SSL en Apache a cada dominio.

1.- Por qué es importante un Certificado SSL?

Deben tener en cuenta que dentro de poco tiempo, Google reconocerá como insegura a todas aquellas web que no tengan un certificado SSL. Ahora en su mayoría de los servicios de hosting ofrecen este servicio junto a sus planes.

Tiempo atrás conseguir un certificado SSL sólo era posible pagando anualmente, pero ahora hay algunas opciones gratuita que nos pueden solucionar la vida. Como “letsencrypt“, que nos ofrece una versión para web de certificate SSL de forma gratuita.

Pero deben tener claro, que si necesitan un certificado SSL para alguna web empresarial o un sistema que realmente necesite seguridad, como un banco.
Deberán obtener un certificado de pago que se ajuste a sus necesidades.

2.- Obtener un Certificado SSL

A esta fecha, se ofrecen algunos Certificados de forma gratuita. Nosotros para esta práctica, obtendremos el certificado letsencrypt desde la web https://www.sslforfree.com.

Tener claro que al ser un certificado gratuito, este tendrá una vigencia de 3 meses, luego de eso tocará realizar todo el proceso nuevamente para cada dominio de forma individual.

Al ingresar al sitio web nos encontraremos con esta pantalla:

2.1.- Crear una cuenta

Como paso opcional, en la parte superior podremos crearnos una cuenta. Al tener una cuenta asociada a nuestro correo, la misma web se encargará de avisarnos días antes de que el certificado llegue a su fecha de vencimiento.

2.2.- Ingresar el dominio a certificar

En la caja de texto deben ingresar su dominio a certificar, de forma limpia, sin http, sin los slash “/”, y sin las “www”. El sitio en automático obtendrá el www del dominio.

Así que en este caso ingresamos dominiopruebauno.com y click en Create Free SSL Certificate.

2.3.- Verificación

En este paso deberán verificar que el dominio en cuestión es su propiedad, así que aquí les dan a elegir 3 formas de verificarlos. Ya es de ustedes elegir el método, pero aquí se realizó con una verificación manual.

2.4.- Verificación manual

En este paso, la página de sslforfree.com les indica los pasos a realizar.

  1.  Deben descargar dos archivos
    1. Download File #1
    2. Download File #2
  2. Subir los archivos a su servidor.

En este paso deben subir los archivos a una ruta específica en su server. Así que debemos crear unos directorios en tu carpeta del dominio o publica public_html.

sudo mkdir /var/www/dominiopruebauno.com/public_html/.well-known

Y dentro de “.well-known”, debemos crear “acme-challenge”

sudo mkdir /var/www/dominiopruebauno.com/public_html/.well-known/acme-challenge

2.5.- Verificar archivos

Cuando ya hayas puesto los dos archivos en el directorio “acme-challenge”, compruébalos con las url que te muestra en el paso 5 del sitio.

Sería algo como esto:

http://dominiopruebauno.com/.well-known/acme-challenge/el_nombre_de_tu_archivo_1
http://www.dominiopruebauno.com/.well-known/acme-challenge/el_nombre_de_tu_archivo_2

Esto sería copiar y pegar en tu navegador. Y así tu compruebas que los dos archivos se lean bien en el navegador.

2.6 Verificación por parte de “sslforfree” y descarga

El siguiente paso sería descargar los archivos del certificado. Así que a darle click en: Download Certificate SSL.

En este paso los archivos que subiste anteriormente a tu server, serán verificados. Si todo está bien, se mostrará la pantalla con tus certificados, y podrás copiarlos uno a uno, y también la opción de descargarlos en formato .zip a tu computadora.

NOTA IMPORTANTE: Es de suma importancia guardar los archivos en un lugar seguro. Ya que si en un futuro necesitas cambiar de hosting y mover tu dominio, los necesitarás para realizar el proceso nuevamente del certificate SSL.

Todo el proceso de generación del certificado SSL y validación, es muy intuitivo, así que es muy poco probable que en esta parte se pierdan en el proceso.

3.- Instalación del certificado SSL en Apache para tu dominio

Con el certificado generado, y los archivos en nuestro poder, pasaremos a instalar el certificado SSL en Apache.

En este paso debemos subir nuestros archivos del certificado a nuestro servidor. Para ellos crearemos (En el caso de que no exista) la carpeta de SSL.

sudo mkdir /etc/ssl

En esta ruta subiremos los 3 archivos de nuestro certificado (los archivos del Zip):

– ca_bundle.ctr
– certificate.ctr
– private.key

Como nota personal, para que todo quede organizado, se recomienda que dentro del directorio /etc/ssl se cree otro directorio con el nombre del dominio y ahí colocar los archivos. Y hacer esto con cada dominio.

sudo mkdir /etc/ssl/dominiopruebauno.com

3.1.- Editar el archivo VirtualHost

Ahora a preparar el archivo dominiopruebauno.com.conf que creamos en el artículo anterior y agregar las ruta del certificado.

Abrimos nuestro archivo:

sudo nano /etc/apache2/sites-available/dominiopruebauno.com.conf

Como lo creamos, debería de verse así:

<VirtualHost *:80>
    ServerAdmin admin@ dominiopruebauno.com
    ServerName dominiopruebauno.com
    ServerAlias www. dominiopruebauno.com
    DocumentRoot /var/www/dominiopruebauno.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Ahora a adaptarlo para integrar el certificado SSL en Apache.

Este bloque lo dejaremos para el certificado con el puerto :443 y luego crearemos otro bloque VirtualHost para el puerto :80 (Que lo necesitamos). Teniendo en cuenta que un certificado SSL en Apache, necesita ocupar el puerto 443.

Se deberá modificar el puerto del servidor, de 80 a 443. Y abajo de la linea de “DocumentRoot”, agregar las siguientes lineas:

#SSL Certificate
SSLEngine on
SSLCertificateFile "/etc/ssl/dominiopruebauno.com/certificate.crt"
SSLCertificateKeyFile "/etc/ssl/dominiopruebauno.com/private.key"
SSLCACertificateFile "/etc/ssl/dominiopruebauno.com/ca_bundle.crt"

Ahora el archivo debería verse como:

<VirtualHost *:443>
    ServerAdmin admin@dominiopruebauno.com
    ServerName dominiopruebauno.com
    ServerAlias www.dominiopruebauno.com
    DocumentRoot /var/www/dominiopruebauno.com/public_html
    
    #SSL Certificate
    SSLEngine on
    SSLCertificateFile "/etc/ssl/dominiopruebauno.com/certificate.crt"
    SSLCertificateKeyFile "/etc/ssl/dominiopruebauno.com/private.key"
    SSLCACertificateFile "/etc/ssl/dominiopruebauno.com/ca_bundle.crt"
    
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Ahora, arriba de este bloque, crearemos otro bloque de VirtualHost pero con el puerto :80 y sólo agregaremos el ServerName y el ServerAlias.

Entonces el archivo dominiopruebauno.com.conf, al final debería verse así:

<VirtualHost *:80>
    ServerName  dominiopruebauno.com
    ServerAlias www.dominiopruebauno.com
</VirtualHost>

<VirtualHost *:443>
    ServerAdmin admin@dominiopruebauno.com
    ServerName dominiopruebauno.com
    ServerAlias www.dominiopruebauno.com
    DocumentRoot /var/www/dominiopruebauno.com/public_html
    
    #SSL Certificate
    SSLEngine on
    SSLCertificateFile "/etc/ssl/dominiopruebauno.com/certificate.crt"
    SSLCertificateKeyFile "/etc/ssl/dominiopruebauno.com/private.key"
    SSLCACertificateFile "/etc/ssl/dominiopruebauno.com/ca_bundle.crt"
    
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Y con esto estaremos listo. Ahora reiniciamos apache para que las modificaciones del VirtualHost se establezcan.

sudo apachectl restart

3.2.-  Troubleshooting

En el caso en que al reiniciar el servidor apache aparezca un error señalando el .conf en alguna linea del SSL, es muy posible que este módulo no esté activado. Sólo lo activamos y listo.

sudo a2enmod ssl

4.- Redireccionando desde HTTP hacia HTTPS

Existe dos maneras de redireccionar nuestro dominio hacia el https; directamente desde el archivo .conf que hemos creado ó desde el archivo .htaccess.

4.1.- Archivo .conf en el VirtualHost

Para esto, debemos agregar una linea a nuestro archivo dominiopruebauno.com.conf para realizar la redireccón.

abrimos el archivo:

sudo nano /etc/apache2/sites-available/dominiopruebauno.com.conf

Y en el primer bloque, el del puerto 80, añadiremos la linea después del ServerAlias:

Redirect permanent / https://dominiopruebauno.com/

Quedando todo el archivo:

<VirtualHost *:80>
    ServerName  dominiopruebauno.com
    ServerAlias www.dominiopruebauno.com
    Redirect permanent / https://dominiopruebauno.com/
</VirtualHost>

<VirtualHost *:443>
    ServerAdmin admin@dominiopruebauno.com
    ServerName dominiopruebauno.com
    ServerAlias www.dominiopruebauno.com
    DocumentRoot /var/www/dominiopruebauno.com/public_html
    
    #SSL Certificate
    SSLEngine on
    SSLCertificateFile "/etc/ssl/dominiopruebauno.com/certificate.crt"
    SSLCertificateKeyFile "/etc/ssl/dominiopruebauno.com/private.key"
    SSLCACertificateFile "/etc/ssl/dominiopruebauno.com/ca_bundle.crt"
    
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Para este paso es necesario reiniciar apache.

sudo apachectl restart

4.2.- .htaccess

Si quieres hacerlo desde este archivo, es necesario agregar unas cuantas lineas. (Tener en cuenta que es el .htaccess donde está el index de tu web.)

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Guardar y listo.

5.- Troubleshooting

Problemas al verificar el segundo archivo desde el alias “WWW”

En el punto 2.4 y 2.5, se explica que se necesitan descargar dos para que https://www.sslforfree.com/ realice la verificación de tu servidor. En pocas palabras verifica directamente tu dominio con y sin el alias WWW.

http://dominiopruebauno.com
http://www.dominiopruebauno.com

Para esta práctica se trabajó con un VPS proporcionado por DigitalOcean.

Pero en el caso de que el segundo archivo para el alias WWW no se reconozca, debes modificar el DNS de tu dominio en tu Droplet.

Para ellos debemos ir a la configuración de tu dominio en tu Droplet, en la sección de DNS Manager y agregar el alias.

Para el dominio dominiopruebauno.com :

– En la opción “CNAME”, debes crear el alias con los siguientes datos.

-En la caja de texto dnde dice “HOSTNAME”, sólo debes ingresar “www”. Y podrás visualizar abajo que se completará tu dominio y se verá “www.dominiopruebauno.com”
-IS AN ALIAS OF, debes ingresar tu dominio “dominiopruebauno.com” o sólo un arroba “@”. Nosotros nos iremos por este últimos. Así que sólo pones un “@”
-Y en CREATE RECORD.

Ya estamos listo, y con eso debería funcionar la verificación del segundo archivo en https://www.sslforfree.com/

 

Todo este proceso es para la certificación de un solo dominio. Deberán repetir todo el proceso para todos los dominios que queréis aplicar el certificado SSL en Apache.

Agregar un comentario

Su dirección de correo no se hará público. Los campos requeridos están marcados *