En este nanotutorial vamos a conocer el proceso para generar un certificado de seguridad SSL con OpenSSL así como la configuración del mismo en Apache HTTP Server.
SSL (Secure Sockets Layer) es un protocolo criptográfico que permite la comunicación segura entre un cliente (usuario con un navegador web) y un servidor.
Certificado SSL
Un certificado SSL es un certificado digital utilizado por el protocolo para el encriptamiento de la información.
Este certificado es proporcionado por un proveedor autorizado (Verisign, Thawte, Comodo, etc…) y es enviado a el cliente por el servidor con quien estamos estableciendo una conexión segura.
Hay muchos servicios que utilizan este protocolo, algunos ejemplos pueden ser: HTTPS, SMTPS, IMAPS, SSH, POP3S, etc…
El certificado que vamos a crear tiene el mismo nivel de encriptamiento que cualquiera de estos proveedores autorizados puede entregar, simplemente no aparecemos en la lista preestablecida en nuestro navegador, y por lo tanto desconfia del mismo.
Instalar OpenSSL
Para instalar OpenSSL debes ejecutar el siguiente comando en tu terminal:
sudo apt-get install openssl
Crear una llave privada
La llave privada nos será útil para la generación del certificado. Una vez creado, nuestro certificado SSL dependerá de esta llave para la implementación del mismo en cualquier servicio que requiera una conexión segura.
En este ejemplo vamos a crear una llave de 1024 bits.
openssl genrsa -out server.key 1024
Crear un CSR (Certificate Signing Request)
Un CSR es la base para un certificado SSL, en el se definen datos como el dominio, organización, ubicación, información de contacto, entre otros.
Es importante destacar que estos pasos tambien son necesarios cuando vas a adquirir un certificado SSL de un proveedor autorizado, durante la gestión del mismo, el proveedor va a solicitar este archivo para crear tu certificado. Por lo tanto, debemos tener mucho cuidado en que la información que ingresamos sea correcta.
Si te equivocas no te preocupes, puedes generarlo las veces que quieras.
Para generar el CSR debes ejecutar el siguiente comando, si te fijas uno de los parámetros es la llave privada que acabamos de crear:
openssl req -new -key server.key -out server.csr
Al ejecutar este comando vendrán una serie de preguntas las cuales voy a explicar a continuación:
Country Name (2 letter code)
Código de país en formato ISO de dos letras.
State or Province Name (full name)
Estado o provincia.
Locality Name
Localidad o ciudad.
Organization Name
Nombre de la organización.
Organizational Unit Name
Sector de la organización.
Common Name
Nombre del dominio ó FQDN. Muy importante, hay una diferencia entre www.nanotutoriales.com a nanotutoriales.com sin www. Si registras tu certificado a una de estas opciones, no funcionará para el otro.
Email Address
Dirección de correo de contacto.
Si se fijan he dejado en blanco los campos A challenge password y An optional company name, no los vamos a necesitar.
Generando el certificado SSL
Para generar el certificado SSL vamos a necesitar tanto la llave privada como el CSR que acabamos de crear.
Para generar el certificado SSL debemos ejecutar el siguiente comando:
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
El parámetro days sirve para definir la fecha de expiración del certificado.
Configurar el certificado SSL en Apache
Si aún no has instalado Apache HTTP Server puedes visitar este nanotutorial.
Primero vamos a copiar los archivos a la carpeta /etc/ssl/certs.
sudo cp server.crt /etc/ssl/certs/ssl.crt sudo cp server.key /etc/ssl/certs/ssl.key
Luego vamos a habilitar el módulo de SSL en Apache:
sudo a2enmod ssl
Ahora vamos a editar el archivo vhosts con el editor de texto nano. Si aún no conoces como trabajar con este editor, te invito a que visites este nanotutorial.
sudo nano /etc/apache2/sites-available/default-ssl
Borra todo el contenido del archivo, luego copia y pega lo siguiente:
<IfModule mod_ssl.c> <VirtualHost _default_:443> ServerName www.example.com ServerAdmin [email protected] DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options -Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined SSLEngine on SSLCertificateKeyFile /etc/ssl/certs/ssl.key SSLCertificateFile /etc/ssl/certs/ssl.crt #SSLCACertificateFile /etc/ssl/certs/bundle.crt BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 # MSIE 7 and newer should be able to use keepalive BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> </IfModule>
No olvides sustituir www.example.com por tu dominio.
Una vez configurado el certificado en el archivo vhost, vamos a habilitarlo con el siguiente comando:
sudo a2ensite default-ssl
Para que la configuración tenga efecto, vamos a cargarla nuevamente. Para esto utilizaremos el siguiente comando:
sudo service apache2 reload
Bien, ahora tienen un certificado SSL configurado y funcionando.
Si en el paso anterior hay un error, puede encontrar el porque del error en el archivo /var/log/apache2/error.log.
Verificamos el certificado SSL desde un navegador
Una vez todo esta configurado, nos resta verificar la url desde nuestro navegador. Para esto vamos a escribir https:// seguido del dominio que hemos configurado en el certificado.
La primera vez que ingresemos nos va a dar una alerta de que el certificado no es de confianza, esto es por no encontrar una identificacion de un proveedor autorizado.
Da clic en Entiendo el riesgo y luego en Anadir una excepcion.
En la pantalla anterior da clic en Confirmar excepcion de seguridad y listo, la comunicacion con tu dominio es segura (siempre y cuando la conexión se mantenga bajo https://), podrás observar el candado en la barra de navegación que lo confirma.
Si das clic en el candado podrás encontrar mas información acerca de el certificado, como por ejemplo: dónde aparece toda la información que ingresaste en el CSR.