viernes, 9 de diciembre de 2011

SSL, qué es y cómo funciona


El protocolo SSL (Secure Sockets Layer), desarrollado por Netscape, permite establecer conexiones seguras a través de Internet. Su trabajo consiste, básicamente, en codificar los mensajes antes de enviarlos por la red. Una vez establecida la comunicación, cuando una aplicación quiere enviar información a otro equipo, el protocolo SSL la recoge y la codifica, e inmediatamente después enviarla a su destino. Una vez que la información llega al destinatario, el módulo SSL del otro ordenador se encarga de decodificar los mensajes y mostrarlos como texto legible en la aplicación destinataria.

Una de las principales ventajas de SSL es que libera a las aplicaciones de llevar a cabo las operaciones criptográficas antes de enviar la información, y apenas hay que modificar los programas ya existentes para que lo utilicen. Desde hace tiempo los principales navegadores de Internet incorporan un módulo SSL, que se activa de forma totalmente automática (por ejemplo, al entrar en direcciones web que empiezan por https).

OpenSSL
El proyecto OpenSSL consiste en un conjunto de herramientas open source que implementan los protocolos de seguridad SSL y TLS (Transport Layer Security). Está basado en las librerías SSLeay desarrolladas por Eric A. Young y Tim J. Hudson
El paquete OpenSSL contiene, principalmente, las librerías crypto y ssl y la aplicación openssl.
La librería crypto implementa muchos de los algoritmos criptográficos usados en varias aplicaciones (como OpenSSH o OpenPGP).
La librería ssl, implementa los protocolos SSL, en sus versiones 2 y 3, y el protocolo TLS, en su versión 1.
El programa openssl es una línea de comandos que permite la utilización de las funciones criptográficas de que dispone la librería crypto. Esta aplicación puede utilizarse para:
  • Crear claves RSA, DH y DSA.
  • Crear certificados X.509, CSR y CRL.
  • Encriptación y desencriptación.
  • Comprobación de clientes y servidores SSL/TLS.
  • Correo encriptado.


Utilización de OpenSSL
Algunos de los parámetros de la aplicación openssl son:
asnlparse: utilidad de diagnóstico que analiza estructuras ASN.1.
ca: para gestionar una Autoridad Certificadora, permitiendo la firma de certificados y generación de listas de revocación.
ciphers: gestiona los distintos métodos de cifrado disponibles.
dhparam: gestiona los parámetros Diffie-Hellman
dgst: crea firmas digitales a partir de ficheros, además de su verificación mediante distintos algoritmos como MD5 o SHA.
dsa: procesa claves DSA. Permite acciones como conversión de formato, la extracción de la clave pública o la encriptación de claves.
dsaparam: utilizado para generar y manipular los parámetros DSA.
enc: permite la encriptación y desencriptación mediante mecanismos de clave simétrica.
errstr: traduce números de error en mensajes de error.
gendsa: genera una clave privada DSA a partir de un fichero DSA.
genrsa: genera claves privadas RSA.
ocsp: implementa el Online Certificate Status Protocol.
passwd: calcula el valor hash de las contraseñas especificadas.
pkcs12: permite el análisis y creación de ficheros PKCS#12 (estándar sintáctico para el intercambio de información personal).
pkcs7: procesa ficheros PKCS#7.
req: utilidad de petición, generación y verificación de certificados PKCS#10 (estándar de sintaxis de petición de certificados).
rsa: procesa claves RSA.
rsautl: utilizado para la firma, encriptación, desencriptación y verificación de datos mediante el algoritmo RSA.
s_client: implementa un cliente SSL/TLS capaz de conectarse a una máquina remota. Útil para tareas de verificación y diagnóstico de servidores SSL.
s_server: implementa la funcionalidad de un servidor SSL/TLS para comprobar conexiones SSL.
s_time: programa de comprobación de rendimiento SSL/TLS.
sess_id: permite analizar los detalles de la sesión.
speed: comando para comprobar el rendimiento de los algoritmos criptográficos.
verify: utilidad para la verificación de cadenas de certificados.
version: muestra la versión de openSSL.

Ejemplos prácticos
Para entender mejor los comandos y parámetros anteriores, vamos a realizar algunos ejemplos viendo cómo se utilizan y para qué.
Para generar una clave con el algoritmo RSA se utiliza el comando genrsa, indicando el fichero de salida y tamaño de la clave. Ejecutamos lo siguiente:

openssl genrsa –out clave_privada 2048

La petición de certificados se realiza mediante el comando req, por medio de una clave, que pudo haber sido creada antes o crearse automáticamente, y genera un fichero de solicitud de certificados en el formato PKCS#10. Se ejecutaría:

openssl req –new –newkey clave_privada –out certificado.csr

Así obtenemos una solicitud (certificado.csr) que deberemos enviar a una Autoridad Certificadora para que la valide.
Mediante la firma del certificado la Autoridad Certificadora da validez a nuestro certificado dotándolo de un periodo de validez e incluyendo sus propias credenciales. Para ello ejecutamos:

openssl ca –policy policy_anything –out certificado.crt –infiles certificado.csr

También podemos hacer que el propio generador del certificado sea quien lo firma sin necesidad de ninguna Autoridad Certificadora. Esto consiste en firmar la solicitud del certificado con la misma clave que fue empleada para generar la solicitud. Se puede utilizar, por ejemplo, para generar certificados de prueba, ya que no tendrán ninguna validez de cara a entidades reales.
Y se utilizaría el comando:

openssl req –new –x509 –days 365 –key fichero_clave –out certificado.crt

Con el parámetro –x509 generaremos un certificado almacenado en el fichero certificado.crt con validez de un año, 365 días, utilizando como clave el archivo fichero_clave.

0 comentarios:

Publicar un comentario