Tutorial paso a paso para generar nuestro propio certificado de seguridad SSL con OpenSSL para cifrar información y su configuración bajo Apache HTTP Server en Debian Wheezy
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.
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.
Para instalar OpenSSL debes ejecutar el siguiente comando en tu terminal:
sudo apt-get install openssl
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
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.
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.
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 webmaster@localhost
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.
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.
Usuario gnu/linux desde hace más de 10 años, amante de la terminal de comandos, apasionado del desarrollo web y fanático de las configuraciones de servidores.