Aprende a configurar un entorno de desarrollo con SSL para un dominio local.

Cómo configurar un certificado SSL/TLS autofirmado en un dominio específico en tu servidor de desarrollo Ubuntu 19.04

En el entorno de producción, existe incluso una forma gratuita de obtener un certificado SSL a través de Let's Encrypt. Sin embargo, en un entorno local, donde trabaja para probar cosas, no necesitas un certificado SSL / TLS firmado y válido públicamente para acceder a un sitio web a través de HTTPS. Es posible usar uno firmado, que puedes comprar en Internet por un precio, por supuesto, pero, ¿por qué harías eso cuando simplemente puedes usar uno autofirmado localmente sin pagar un centavo?

En este artículo, te explicaremos cómo crear fácilmente una versión segura de un sitio web local utilizando un certificado SSL autofirmado en Ubuntu.

1. Crea un certificado SSL autofirmado

Necesitarás un certificado para que tu dominio sea compatible con HTTPS. Crea el siguiente directorio en el directorio de instalación de apache con el siguiente comando:

sudo mkdir /etc/apache2/ssl

Luego, cree el certificado dentro del directorio creado anteriormente con el siguiente comando:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt

Esto iniciará un mensaje solicitando información sobre el certificado, puede completarlo con datos reales o falsos, ya que solo debe usarse en un entorno local :

Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]: Blabla
Locality Name (eg, city) []: Blabla
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Blabla
Organizational Unit Name (eg, section) []: Department of Blabla
Common Name (e.g. server FQDN or YOUR name) []: mycustomdomain.com
Email Address []: [email protected]

Después de terminar, tendrá un certificado autofirmado que se puede utilizar para proporcionar soporte HTTPS para un dominio en Apache. Los archivos de salida:

  • /etc/apache2/ssl/apache.key
  • /etc/apache2/ssl/apache.crt

Se utilizará en el tercer paso.

2. Cree una versión HTTP del host.

Primero, necesitarás tener la versión estándar de tu VirtualHost, que escucha en el puerto 80 (http: //mycustomdomain). La configuración de este vhost generalmente depende de ti, sin embargo, hay algunas cosas que debes considerar como importantes para crear VirtualHost en la versión HTTPS también. Deberás definir exactamente:

  • Nombre del servidor
  • ServerAlias
  • Raiz del documento

Las 3 propiedades mencionadas deben ser las mismas en la versión HTTPS, así que asegúrese de que coincidan. El siguiente vhost es un ejemplo de un vhost http básico que escucha en mycustomdomain.com:, este archivo se ubicará en /etc/apache2/sites-available/mycustomdomain.conf:

<VirtualHost *:80>
	ServerAdmin [email protected]
	ServerName mycustomdomain
	ServerAlias www.mycustomdomain.com
	DocumentRoot /var/www/html/mycustomdomain

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined

	<Directory /var/www/html/mycustomdomain>
	    Options Indexes FollowSymLinks MultiViews
	    AllowOverride All
	    Order allow,deny
	    allow from all
	</Directory>
</VirtualHost>

A menos que ya tenga este vhost, deberá habilitarlo con:

# Enable site
a2ensite mycustomdomain

# Restart apache
systemctl restart apache2

Esto te permitirá navegar a mycustomdomain.com en tu navegador en la versión HTTP (asumiendo que ya tienes un alias para el host en en el archivo /etc/hosts como por ejemplo 127.0.0.2    mycustomdomain.com).

3. Crea la versión HTTPS

Ahora, básicamente, lo que debes hacer es crear la versión HTTPS del mismo host virtual anterior con las mismas propiedades, sin embargo, agregaremos algunas configuraciones adicionales para habilitar el soporte HTTPS:

SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key

Es importante notar que las propiedades mencionadas en el paso 2:

  • Nombre del servidor
  • ServerAlias
  • Raiz del documento

Necesita ser EL MISMO en este vhost, de lo contrario, el host no funcionará. En este caso, nuestra versión HTTPS del host se ubicará en  /etc/apache2/sites-available/mycustomdomain_ssl.conf y tendrá el siguiente contenido:

<IfModule mod_ssl.c>
    <VirtualHost _default_:443>       
        ServerAdmin  [email protected]
        ServerName mycustomdomain.com
        ServerAlias www.mycustomdomain.com
        DocumentRoot /var/www/html/mycustomdomain

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        #   SSL Engine Switch:
        #   Enable/Disable SSL for this virtual host.
        #   They should target the .key and .crt file created on the first step.
        SSLEngine on
        SSLCertificateFile /etc/apache2/ssl/apache.crt
        SSLCertificateKeyFile /etc/apache2/ssl/apache.key

        <Directory /var/www/html/mycustomdomain>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
        </Directory>
    </VirtualHost>
</IfModule>

Luego, habilita este host virtual y reinicie Apache:

# Habilitar sitio
a2ensite mycustomdomain_ssl

# Habilitar el soporte SSL en apache
sudo a2enmod ssl

# Reiniciar apache
systemctl restart apache2

Ahora, deberías poder acceder a tu dominio utilizando el protocolo seguro https://mycustomdomain.

Que te diviertas ❤️!


Ingeniero de Software Senior en EPAM Anywhere. Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores