Un certificado SSL (Secure Socket Layer en español capa de puertos seguros) es utilizado para el encriptamiento de información a través de algoritmos matemáticos y un sistema de claves que la persona que navega y el servidor pueden identificar, esto evita que terceros puedan conocer tu información personal o la de los usuarios que establecen una comunicación. Todo con el fin de que los datos viajen de manera integra, lo quiere decir que la información no sufre ninguna modificación en ningún tramo de la comunicación, garantizando que sea fiable y provenga del lugar al cual estamos accediendo y no de un tercero.
Debemos tener en cuenta que una cosa es crear un certificado y otra firmarlo, ya que de esto se encarga una Autoridad Certificadora aunque esto no quiere decir que no podamos firmarlo nosotros mismos, si que, no va a ser reconocido por los navegadores en el caso de utilizarlo en una pagina web ya que no es una firma certificada por una autoridad provocando que nos pregunte si queremos añadir el certificado.
Generar un Certificado SSL autofirmado
Si bien se denomina SSL al certificado de seguridad que se implementa es solo porque así se llamaba la primera versión pero lo que en realidad vamos a utilizar es el protocolo TLS (Transport Layer Security en español seguridad de la capa de transporte) que es una versión actualizada y más segura de SSL, Para ello vamos a utilizar OpenSSL una librería que nos ayudan a implementar protocolos de seguridad TLS.
Instalación de OpenSSL
En el caso de Centos 7 ya se encuentra instalada por defecto, pero si no cuentas con el puedes verificar si el paquete se encuentra instalado con el siguiente comando:
[code language=»bash»]
yum info openssl
[/code]
También puedes instalarlo en cualquier distribución basada en RHEL con el siguientes comando:
[code language=»bash»]
yum install openssl
[/code]
Debemos cambiar los permisos de usuario que tiene el directorio private ya que en el se almacenara el archivo llave y solo queremos que sea visible por el administrador.
[code language=»bash»]
chmod 700 /etc/pki/tls/private
[/code]
Los pasos siguientes son:
- Crear una llave privada.
- Crear un CSR (Certificate Signing Request).
- Generando el certificado SSL
Pero podemos resumir el proceso en un solo comando:
[code language=»bash»]
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/pki/tls/private/certificado.key -out /etc/ssl/certs/certificado.crt
[/code]
openssl : Esta es la herramienta para la creación y gestión de certificados OpenSSL, llaves y otros archivos.
req -x509: la opción req crea un certificado PKCS#10 que un estándar de «X.509» la cual es una norma de infraestructura de clave pública SSL y TLS.
-nodes: Omite la opción de asegurar nuestro certificado con una frase de contraseña. esto lo hacemos para poder leer el archivo sin intervención del usuario cuando se inicia el servidor.
-days 365: período de tiempo en días que se considera válido el certificado.
-newkey rsa:2048: Esto especifica que queremos generar un nuevo certificado y una clave nueva al mismo tiempo. la clave se necesita para poder firmar el certificado, también se indica que la clave RSA va a tener una longitud de 2048 bits.
-keyout: Ruta dónde colocar el archivo de clave privada generada que se esta creando.
-out: Ruta dónde debe colocar el certificado que estamos creando.
Es importante llenar adecuadamente todos los campos, en especial «Common Name» ya que se trata del nombre de dominio de su servidor o en su defecto la dirección IP pública si no tiene un nombre de dominio.
Ejemplo:
Country Name (2 letter code) [XX]:CO
State or Province Name (full name) []:Antioquia
Locality Name (eg, city) [Default City]:Medellin
Organization Name (eg, company) [Default Company Ltd]: Mi Empresa LTDA
Organizational Unit Name (eg, section) []: Contaduria
Common Name (eg, your name or your server’s hostname) []: miempresa.com
Email Address []: webmaster@miempresa.com
Como podemos preguntarnos por que utilizamos un certificados SSL con un tamaño de llave (bit lenght) de 2048 bits pues la respuesta es sencilla, esto es debido a que según los estándares de la tecnología SSL la llave debe tener ese tamaño como mínimo para que no sea vulnerable ante un posible ataque.
también hay que crear un grupo Diffie-Hellman (DH), que se utiliza en la negociación de Confidencialidad directa (Perfect Forward Secrecy) con los clientes siendo un protocolo de establecimiento de claves entre partes que no han tenido contacto previo.
Podemos hacer esto escribiendo:
[code language=»bash»]
sudo openssl dhparam -out /etc/ssl/certs/dh.pem 2048
[/code]
Esto puede tomar algunos minutos debido a que se necesita tiempo para computar la clave.
anexamos manualmente el archivo «dh.pem» que acabamos de generar al final de nuestro certificado auto firmado «certificado.crt». Para esto utilizamos en siguiente comando:
[code language=»bash»]
cat /etc/ssl/certs/dh.pem | sudo tee -a /etc/ssl/certs/certificado.crt
[/code]
Modo de utilización
En los archivos de configuración de sus servidores HTTP Apache y FTP encuentre las líneas SSLCertificateFiley SSLCertificateKeyFile, y cámbielas indicando el archivo clave y el certificado.
[code language=»bash»]
SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/pki/tls/private/apache-selfsigned.key
[/code]
o
[code language=»bash»]
TLSRSACertificateFile /etc/ssl/certs/apache-selfsigned.crt
TLSRSACertificateKeyFile /etc/pki/tls/private/apache-selfsigned.key
[/code]
Mucha de la información fue recopilada y traducida de www.digitalocean.com así que si puedes leer fluidamente ingles te recomiendo que pases por esa pagina.
Hola Jona, gracias por tu artículo, Estoy enfrentándome con una instalación en la cual adquirimos a GoDaddy un certificado, sin embargo, sólo nos dieron un archivo .crt, uno .pem y uno .p7b, no viene un .key ¿Cómo lo obtengo?
Revisa la documentación de godaddy https://co.godaddy.com/help/instalar-certificados-ssl-16623 y ve donde dice apache centos.
Hola, buen día el archivo .Key cuando se genera o donde lo encuantro?
En las rutas que definiste en el comando openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/pki/tls/private/certificado.key -out /etc/ssl/certs/certificado.crt
Ruta: /etc/pki/tls/private/
/etc/pki/tls/private/certificado.key