Como Documentación personal dejo registro de algo que he hecho en otras oportunidades, pero de lo cual no siempre recuerdo todos los parámetros. 😉
Para quien lea éste artículo, daré solo algunas pautas esenciales para la implementación del protocolo SSL sobre plataformas WEB y el uso de certificados auto firmados.
OBJETIVOS
UTILIDAD DE UN SITIO HTTPS
Quien no sea muy entendido, podrá desconocer que cuando son insertados datos dentro de formularios de sitios que solamente usan http, estos datos son enviados en texto claro por la red y pueden ser capturados y utilizados de manera maliciosa por cualquiera que tenga acceso a los equipos de comunicaciones por donde pasan estos datos.
REQUISITOS DE UN SITIO VALIDO
Para que un sitio sea reconocido como un sitio seguro válido, debe cumplir con 3 condiciones esenciales:
CERTIFICADOS AUTO FIRMADOS
Cuando se utilizan certificados, estos deberían ser firmados por una entidad reconocida ( C A ) como lo es verisign. Los navegadores tienen registrados una gran cantidad de entidades reconocidas dentro de lo que se conoce como Entidades Raiz de Confianza. Cuando un administrador de sistemas decide generar por si mismos los certificados y también firmarlos, se produce una advertencia por parte del navegador, indicando que la entidad emisora que ha firmado el certificado no es de confianza y que puede tratarse de un certificado inválido o un sitio falsificado.
La manera correcta de habilitar un sitio auto firmado consiste en generar los certificados, firmarlos y hacer que los clientes reconozcan al equipo que los firma como una CA válida dentro de los certificados raíz de confianza
EMISION Y FIRMA DE CERTIFICADOS
A continuación la forma de emitir certificados para la CA y un sitio web utilizando Linux, apache2 y openSSL. ( Fuente Original )
Generando Certificados para la CA.
En mi caso, voy generar una Entidad Emisora de Certificados Llamada zamoranelson.cl, por lo que he de generar los certificados y llaves correspondientes llenando los datos solicitados por openSSL.
Creamos un directorio llamado / etc / apache2/ssl y ejecutamos los siguientes comandos.
openssl genrsa -des3 -out zamoranelson.cl-ca.key 2048
openssl req -new -x509 -days 3650 -key zamoranelson.cl-ca.key -out zamoranelson.cl-ca.crt
openssl x509 -in zamoranelson.cl-ca.crt -text -noout
Con esto ya podemos comenzar a firmar certificados para nuestros sitios web por 10 años mas.
Ahora firmaré un certificado para mi sitio personal rodrigo.zamoranelson.cl
openssl genrsa -des3 -out rodrigo.zamoranelson.cl.key 1024
openssl req -new -key rodrigo.zamoranelson.cl.key -out rodrigo.zamoranelson.cl.csr
En esta sección, openSSL preguntará lo siguiente:
Common Name (eg, your name or your server's hostname) []
Aqui se debe ingresar el dominio exacto del sitio web en el que se usará el certificado, en mi caso, rodrigo.zamoranelson.cl
openssl x509 -req -in rodrigo.zamoranelson.cl.csr -out rodrigo.zamoranelson.cl.crt -sha1 -CA zamoranelson.cl-ca.crt -CAkey zamoranelson.cl-ca.key -CAcreateserial -days 3650
openssl x509 -in rodrigo.zamoranelson.cl.crt -text -noout
En esta sección ya hemos generado y firmado nuestro certificado con la CA zamoranelson.cl para el sitio rodrigo.zamoranelson.cl, el cual será valido también por 10 años.
CONFIGURACION DE APACHE2
NameVirtualHost *:443
<VirtualHost *:443>
ServerName powers2.cl
ServerAlias rodrigo.zamoranelson.cl
CustomLog /var/log/rodrigo.zamoranelson.cl.log full
DocumentRoot /home/mcbrain
SSLCertificateFile /etc/apache2/ssl/rodrigo.zamoranelson.cl.crt
SSLCertificateKeyFile /etc/apache2/ssl/rodrigo.zamoranelson.cl.key
SSLEngine on
</VirtualHost>
Apache en sus configuraciones tiene un parámetro que indica el puerto de escucha, normalmente es el 80, por lo que está definido como Listen 80. En debian está definido dentro del archivo ports.conf, pero en otras distribuciones puede estar en el mismo apache.conf. Para habilitar el puerto 443 tcp, que es el utilizado en https, debemos agregar la linea Listen 443 y ademas escribir el comando a2enmod ssl para activar el soporte SSL
En este punto, luego de reiniciar apache2 e ingresar la misma contraseña que usamos al generar los certificados, ya deberíamos poder acceder al sitio.
Cada vez que se inicie el servicio, como en el paso anterior, se solicitará la clave asignada. Esta característica fue diseñada por razones de seguridad, es necesaria ya que la llave RSA privada del archivo server.key se encuentra encriptada con ella, sin embargo es posible removerla bajo consideración del administrador. Para remover esta capa de seguridad se deben ejecutar los pasos siguientes.
- mv rodrigo.zamoranelson.cl.key rodrigo.zamoranelson.key.old
- openssl rsa -in rodrigo.zamoranelson.cl.key.old -out rodrigo.zamoranelson.cl.key
Enter pass phrase for server.key.orig: **************
Y luego reiniciar apache2.
Lo normal es que el navegador nos advierta que el certificado ha sido emitido y firmado por una entidad desconocida, para corregir este problema, llevaremos el archivo antes generado zamoranelson.cl-ca.crt a los clientes que accederán al sitio. Los archivos .crt son una extensión reconocida por los principales sistemas operativos como un certificado digital, por lo que es probable que baste con hacer doble click sobre él para instalarlo dentro de los certificados raíz de confianza del equipo para que los navegadores ya no desconozcan el certificado como uno auto firmado inválido.
Para evitar este paso, se usan certificados firmados por entidades oficiales como verisign, pero esto tiene un costo asociado.