Certificado autofirmado en CentOS / RHEL

A continuación os voy a intentar explicar de una manera breve, cómo podemos crear un certificado autofirmado para un servidor web, es decir, para navegar por HTTPS, utilizando el paquete openssl. En esta ocasión voy a trabajar sobre una máquina RHEL (Red Hat Entrerprise Linux) 7.3. También podéis utilizar CentOS, pero OJO, debe ser la misma versión que la RHEL, ya que a nivel binario estos dos sistemas operativos son idénticos.

Antes de comenzar con el proceso y su explicación, como ya sabéis, me gusta aclarar conceptos…

¿Que es un certificado digital?

Un certificado digital o certificado electrónico es un fichero informático generado por una entidad de servicios de certificación que asocia unos datos de identidad a una persona física, organismo o empresa confirmando de esta manera su identidad digital en Internet. El certificado digital es válido principalmente para autenticar a un usuario o sitio web en internet por lo que es necesaria la colaboración de un tercero que sea de confianza para cualquiera de las partes que participe en la comunicación. El nombre asociado a esta entidad de confianza es Autoridad Certificadora pudiendo ser un organismo público o empresa reconocida en Internet.

El certificado digital tiene como función principal autenticar al poseedor pero puede servir también para cifrar las comunicaciones y firmar digitalmente. En algunas administraciones públicas y empresas privadas es requerido para poder realizar ciertos trámites que involucren intercambio de información delicada entre las partes.

Fuente original: https://es.wikipedia.org/wiki/Certificado_digital

¿Que son los protocolos TLS y SSL?

Transport Layer Security (TLS; en español «seguridad de la capa de transporte») y su antecesor Secure Sockets Layer (SSL; en español «capa de puertos seguros») son protocolos criptográficos que proporcionan comunicaciones seguras por una red, comúnmente Internet.

Se usan certificados X.509 y por lo tanto criptografía asimétrica para autentificar a la contraparte con quien se están comunicando,2 y para intercambiar una llave simétrica. Esta sesión es luego usada para cifrar el flujo de datos entre las partes. Esto permite la confidencialidad del dato/mensaje, y códigos de autenticación de mensajes para integridad y como un producto lateral, autenticación del mensaje.Varias versiones del protocolo están en aplicaciones ampliamente utilizadas como navegación web, correo electrónico, fax por Internet, mensajería instantánea, y voz-sobre-IP (VoIP). Una propiedad importante en este contexto es forward secrecy, para que la clave de corta vida de la sesión no pueda ser descubierta a partir de la clave asimétrica de largo plazo

TLS es un protocolo Internet Engineering Task Force (IETF), definido por primera vez en 1999 y actualizado en el RFC 5246 (agosto de 2008) y en RFC 6176 (marzo de 2011). Se basa en las especificaciones previas de SSL (1994, 1995, 1996) desarrolladas por Netscape Communications4 para agregar el protocolo HTTPS a su navegador Netscape Navigator.

Fuente originalhttps://es.wikipedia.org/wiki/Transport_Layer_Security

Diferencias entre HTTP y HTTPS

 

HTTP HTTPS
URL comienza con “http://” URL comienza con “https://”
Se utiliza el puerto 80 para la comunicación Se utiliza el puerto 443 para la comunicación
Sin garantía Asegurado
Funciona a nivel de aplicación Funciona a nivel de transporte
Sin cifrado Con certificado
No hay certificados requeridos Certificado prescrito

Fuente original: http://www.informatica-hoy.com.ar/aprender-informatica/Diferencias-HTTP-HTTPS.php

Algoritmos de cifrado

Cifrado asímetrico y cifrado simétrico

Los sistemas de cifrado simétrico son aquellos que utilizan la misma clave para cifrar y descrifrar un documento. El principal problema de seguridad reside en el intercambio de claves entre el emisor y el receptor ya que ambos deben usar la misma clave.

Este sistema de cifrado (asimétrico) usa dos claves diferentes. Una es la clave pública y se puede enviar a cualquier persona y otra que se llama clave privada, que debe guardarse para que nadie tenga acceso a ella. Para enviar un mensaje, el remitente usa la clave pública del destinatario para cifrar el mensaje. Una vez que lo ha cifrado, solamente con la clave privada del destinatario se puede descifrar, ni siquiera el que ha cifrado el mensaje puede volver a descifrarlo.Por ello, se puede dar a conocer perfectamente la clave pública para que todo aquel que se quiera comunicar con el destinatario lo pueda hacer.

Fuente original: https://infosegur.wordpress.com/unidad-4/criptografia-simetrica-y-asimetrica/

Algoritmos de cifrado simétrico

DES: Estándar de cifrado de flujo de 52 bits usado en 1976. La cadena de 56 bits es muy corta, por lo que es capaz de comprometerse en menos de 24 horas.

Longitud de clave: 52 bits.

Tamaño de bloque: No

TDES: Conocido también como 3DES o TripleDES, no es más que el estándar DES aplicado 3 veces. En realidad se dobla la longitud efectiva, siendo de 112 bits, aunque es preciso triplicar el número de operaciones de cifrado, haciendo este método de cifrado muchísimo más seguro que el DES. La longitud de la clave es de 192 bits, aunque como se ha dicho su eficacia solo sea de 112 bits.

Longitud de clave: 192 bits (eficaces 112 bits).

Tamaño de bloque: No

RC2: Este algoritmo se diseñó para reemplazar al DES y es un algoritmo por clave de tamaño variable de entre 64 y 128 bits que trabaja con bloques de 64 bits y es entre dos y tres veces más rápido que DES. Se puede hacer más seguro que el DES contra ataques de fuerza bruta eligiendo el tamaño de clave apropiadamente.

Longitud de clave: Variable entre 64 y 128 bits.

Tamaño de bloque: No

ICE: Es un cifrado de bloques con clave de 64 bits derivado de DES, sin embargo ha sido mejorado y diseñado para ser seguro contra el criptoanálisis diferencial y lineal. Su tamaño de clave puede ser cualquier múltiplo de 64 bits, mientras que la clave DES está limitado a 56 bits.

Longitud de clave: Cualquier múltiplo de 64 bits.

Tamaño de bloque: No

IDEA (International Data Encriptión Algorithm): Algoritmo simétrico que aplica una clave de 128 bits sin paridad a bloques de datos de 64 bits, y se usa tanto para cifrar como para descifrar. Está considerado uno de los más seguros actualmente.

Longitud de clave: 128 bits.

Tamaño de bloque: 64 bits.

GOST: Es un algoritmo de cifrado de origen ruso que podría ser considerado el análogo ruso al AES. Emplea bloques de 64 bits y claves de 256 bits y no ha podido ser vulnerado a pesar de haber sido uno de los más estudiados. El mensaje de entrada se divide en trozos de bloques de 256 bits (ocho de 32 bits enteros endian) y el mensaje se rellena añadiendo tantos ceros como se requiere para llevar la longitud del mensaje hasta 256 bits. También se utiliza como función hash.

Longitud de clave: 256 bits.

Tamaño de bloque: 64 bits.

AES: El algoritmo más utilizado hoy en día. La longitud de clave puede ser de 128 bits (10 rondas), 192 bits (12 rondas) o 256 bits (14 rondas) basado en sustituciones, permutaciones y transformaciones lineales, ejecutadas en varias veces en bloques de datos de 16 bytes. El cambio de un solo bit, ya sea en la clave, o en los bloques de texto simple y claro, resulta en un bloque de texto cifrado completamente diferente. Algunos criptógrafos muestran preocupación sobre la seguridad porque el número de rondas especificado en el cifrador es muy pequeño y por tener una descripción matemática muy ordenada, y por lo tanto, predecible.

Longitud de clave: 128, 192 y 256 bits.

Tamaño de bloque: 128 bits.

Rindjael: Es un algoritmo de cifrado simétrico por bloques, estándar para su uso en AES. Tiene un tamaño de bloque de 128, 192 o 256 bits y tamaños de llave de 128, 192 o 256 bits. Se basa en una red de sustitución-permutación con 14 rondas para la versión de 256 bits.

Longitud de clave: Variable múltiplo de 4 bytes: 128, 192 y 256 bits.

Tamaño de bloque: Variable múltiplo de 4 bytes: 128, 192 y 256 bits.

Serpent: Es un algoritmo de cifrado simétrico de bloques, competidor directo de AES, que usa un tamaño de bloque de 128 bits y soporta tamaños de clave de 128, 192 y 256 bits de longitud. El cifrado consiste en 32 rondas de substitución-permutación operando sobre cuatro bloques de 32 bits. Cada ronda usa 32 copias de la misma S-Box de 4-bit a 4-bit. Serpent se diseñó para que las operaciones se realizasen en paralelo, usando 32 desplazamientos de 1 bit.

Longitud de clave: Variable, 128, 192 y 256 bits.

Tamaño de bloque: 128 bits.

Blowfish: Es un codificador de bloques simétricos de 64 bits AES y claves que van desde los 32 bits hasta 448 bits, incluido en un gran número de conjuntos de codificadores y productos de cifrado. Es un codificador de 16 rondas y usa llaves que dependen de las Cajas-S, En total, el algoritmo de cifrado Blowfish correrá 521 veces para generar todas las subclaves, y cerca de 4KB de datos son procesados.

Longitud de clave: Variable: de 32 a 448 bits.

Tamaño de bloque: 64 bits.

Twofish: Es un algoritmo simétrico con cifrado por bloques de tipo AES. El tamaño de bloque es de 128 bits y el tamaño de clave puede llegar hasta 256 bits. Las características distintivas de Twofish son el uso de S-boxes pre-computadas con llaves dependientes, y una llave-horario relativamente compleja. Es levemente más lento que Rijndael (el algoritmo elegido para AES) para las llaves de 128 bits, pero algo más rápido para las llaves de 256 bits y en muchas ocasiones es más seguro que AES.

Longitud de clave: Variable, hasta 256 bits.

Tamaño de bloque: 128 bits.

Algoritmos de cifrado asimétrico

ElGamal: Sistema de cifrado asimétrico libre de patentes y utilizado tanto para generar firmas digitales como para cifrar/descifrar. Su funcionamiento se basa en cálculos sobre “logaritmos discretos”, factorizando números muy grandes, de 150 dígitos o más. Usa para ello un número primo y dos enteros. La velocidad de cifrado y autenticación es inferior a la obtenida con RSA, las firmas producidas son más largas y los mensajes cifrados ocupan el doble que el mensaje plano.

Longitud de clave: Sin límite. El límite lo marca el protocolo usado.

RSA: Sistema de cifrado asimétrico, que a diferencia de los anteriores sistemas, trabaja con dos claves diferentes: una clave “pública”, y otra “privada”. Ambas son complementarias entre sí, así que un mensaje cifrado con una de ellas sólo puede ser descifrado por su contraparte. La longitud de clave va desde los 128 bits a los 4096.

Longitud de clave: Variable: 128, 256, 1024, 2048 y 4096 bits.

DSA: Algoritmo asimétrico diseñado para las firmas digitales. Ofrece el mismo nivel de seguridad que RSA, aunque está en constante desarrollo debido al apoyo gubernamental.

Longitud de clave: Entre 1024 y 3072 bits.

Fuente original: https://elbinario.net/2016/04/05/algoritmos-de-cifrado-i/

Diferencias entre KEY, CRT, CSR y CA

Fichero .csr (Certificate Signing Request)

Cuando vamos a solicitar un certificado para un servidor lo primero que debemos hacer es generar una solicitud de firma de certificado. Se trata de un bloque de texto cifrado que se genera en el servidor dónde el certificado será utilizado y que posteriormente enviaremos a una CA para su firma.

Este fichero contiene la siguiente información:

Nombre común: el nombre de dominio completo (FQDN) del servidor. Debe coincidir exactamente con lo que escribimos en el navegador. Por ejemplo *.empresa.com
Organización: el nombre legal de la organización. Por ejemplo Empresa S.A.
Unidad organizativa: la división de la organización que gestiona el certificado. Por ejemplo Departamento de TI.
Ciudad/Localidad: la ciudad donde se encuentra la organización. Por ejemplo Getafe.
Estado/Provincia: el estado/región donde se encuentra la organización. Por ejemplo Madrid.
País: las dos letras del código ISO del país en el que la organización se encuentra. Por ejemplo ES.
Dirección de correo electrónico: dirección de correo electrónico utilizada para contactar con la organización. Por ejemplo webmaster@empresa.com
Clave Pública: la clave pública del servidor (generada automáticamente).

Fichero .key

Como habéis podido ver, durante la creación del fichero .csr se genera un nuevo fichero con extensión .key

Este fichero contiene la clave privada del servidor y no debemos hacerlo público bajo ningún concepto. También suele encontrarse en formato PEM.

Proceso de instalación y creación de certificado autofirmado

yum install mod_ssl openssl

openssl genrsa -out [nombrecert].key 4096

openssl reg -new -key [nombrecert].key -out [nombrecert].csr

openssl x509 -reg -days 365 -in [nombrecert].csr -signkey [nombrecert].key -out [nombrecert].crt

cp [nombrecert].key /etc/pki/tls/private/[nombrecert].key
cp [nombrecert].crt /etc/pki/tls/certs/[nombrecert].crt

Editar fichero configuración apache y establecer rutas a certificados…esto no es nada del otro mundo 🙂

Hasta la próxima!!

About: Miguel Carretas Perulero

Miguel Carretas Perulero ha escrito 61 artículos en este blog.

Deja un comentario