SSL y su sucesor TLS (Secure Sockets Layer / Transport Layer Security) agregan una capa de cifrado entre el cliente y el servidor. Sin esta tecnología, los datos se envían al servidor en texto plano, lo que permite a terceros leer toda la información enviada y recibida por su servidor.
Este tutorial le enseñará cómo crear un certificado SSL / TLS y activarlo en Apache 2.4 en Ubuntu 16.04. Supongo que Apache ya está configurado y funcionando. Si desea aprender cómo instalar una pila LAMP, consulte este documento de Vultr .
Atención
Los certificados SSL / TLS normalmente son generados por una CA confiable (autoridad de certificación). Al generarlo usted mismo, usted será el firmante, lo que significa que el navegador no podrá verificar si la identidad del certificado debe ser confiable y advertirá al usuario. Aunque es posible omitir esta alerta, los sitios públicos deben usar un certificado firmado por una CA confiable. Vamos a cifrar es una CA que ofrece certificados de forma gratuita. Puede aprender cómo instalar su certificado en Apache y Ubuntu 16.04 aquí .
Para aplicaciones internas, el uso de un certificado autofirmado puede ser válido, especialmente si no tiene un nombre de dominio.
Paso 1: generar el certificado
-
Primero, creemos un lugar para almacenar el archivo.
mkdir ~/certificates
cd ~/certificates
-
Generar CSR y clave privada.
openssl req -x509 -newkey rsa:4096 -keyout apache.key -out apache.crt -days 365 -nodes
Le pedirá información para la solicitud de certificado. Completo con la información adecuada.
Country Name (2 letter code) [AU]: US
State or Province Name (full name) [Some-State]: FL
Locality Name (eg, city) []: Miami
Organization Name (eg, company) [My Company]: My Company
Organizational Unit Name (eg, section) []:
El nombre común debe ser su nombre de dominio o la dirección IP del servidor. Además, complete su correo electrónico.
Common Name (e.g. server FQDN or YOUR name) []: 203.0.113.122
Email Address []:[email protected]
-
Ahora, mueva el certificado a la carpeta de configuración de Apache.
mkdir /etc/apache2/ssl
mv ~/certificates/* /etc/apache2/ssl/.
-
El certificado esta listo! A continuación, prepararemos Apache para trabajar con el certificado.
Paso 2: configuración del firewall
-
Tenemos que asegurarnos de que el puerto TCP 443 esté abierto. Este puerto se usa en conexiones SSL en lugar del puerto 80. En este tutorial, usaremos UFW.
-
Asegúrese de que UFW esté habilitado.
sudo ufw enable
-
Ahora permita la configuración predefinida de Apache para el firewall.
sudo ufw allow 'Apache Full'
-
Al escribir " sudo ufw status
", puede ver una lista de las reglas actuales. Su configuración debería parecerse a esto:
To Action From
-- ------ ----
Apache Full ALLOW Anywhere
OpenSSH ALLOW Anywhere
Apache Full (v6) ALLOW Anywhere (v6)
OpenSSH (v6) ALLOW Anywhere (v6)
-
También debe permitir OpenSSH aquí para futuras conexiones.
sudo ufw allow 'OpenSSH'
Paso 3: configuración del host virtual Apache
-
Navegue al directorio de configuración del sitio Apache predeterminado.
sudo nano /etc/apache2/sites-available/default-ssl.conf
-
Este archivo le dice al servidor dónde buscar el certificado SSL. Con los comentarios eliminados, debería verse como la siguiente configuración.
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
-
Edite esta línea:
ServerAdmin [email protected]
-
Agregue esto justo debajo de la ServerAdmin
línea:
ServerName ADD_YOUR_IP_OR_DOMAIN_NAME_HERE
-
Ahora, edite estas líneas con nuestra ubicación de certificado:
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
-
Nuestro archivo final debería parecerse a esto:
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin [email protected]
ServerName 203.0.113.122
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
-
Guarde y cierre el archivo.
Paso 4: Habilitar el módulo Apache SSL
-
Habilite el módulo SSL escribiendo:
sudo a2enmod ssl
-
Ahora habilite el sitio que acabamos de editar:
sudo a2ensite default-ssl.conf
-
Reiniciar Apache:
sudo service apache2 restart
-
¡Accedamos al nuevo sitio web seguro! Ábralo en su navegador (asegúrese de escribir https: // ).
https://YOUR_SERVER_IP
Su navegador le advertirá que el certificado no es válido, como esperábamos. Esto sucede porque el certificado no está firmado. Siga los pasos ofrecidos por su navegador para acceder a su sitio.
Paso 5: Redirige todo el tráfico HTTP a HTTPS (Opcional)
-
Abra el archivo de host virtual predeterminado de Apache:
nano /etc/apache2/sites-available/000-default.conf
-
Agregue esta línea dentro de la <VirtualHost *:80>
etiqueta:
Redirect / https://YOUR_SERVER_IP_OR_DOMAIN/
-
Recargar la configuración de Apache:
sudo service apache2 reload
Todo el tráfico del sitio web ahora se redirigirá automáticamente a HTTPS.