OpenSSL

  • Este artículo explica cómo analizar las suites de cifrado y protocolos SSL/TLS soportados por un servidor Web, desde línea de comandos, utilizando la herramienta "cipherscan" desarrollada y mantenida por la Fundación Mozilla.

    Existen muchas herramientas online para diagnosticar y verificar el nivel de seguridad ofrecido en la implementación de SSL/TLS de un servidor Web, por ejemplo el Test SSL de Qualys. Sin embargo, es importante disponer de una herramienta de línea de comandos para llevar a cabo la misma tarea, especialmente si necesitamos verificar el nivel de seguridad de SSL/TLS de servidores Web no accesibles desde Internet. A tal fin, dí con la herramienta cipherscan (creada por la Fundación Mozilla), la cual sirve para listar todas las suites de cifrado soportadas por un servidor HTTPS y su ordenamiento, al igual que analizar y verificar la información de certificados, opciones de TLS, OCSP Stapling y más.

  • Recientemente me tocó configurar un servidor MySQL para autenticar usuarios mediante certificados SSL en lugar de contraseñas. El mecanismo de autenticación necesita un certificado para el servidor MySQL y un certificado para cada usuario, todos firmados por la misma autoridad certificante (CA).

  • Este artículo explica cómo configurar SSL para implementar HTTPS en un servidor Web Apache sobre sistemas Debian/Devuan y derivados. En la actualidad es imprescindible contar con soporte para HTTPS en nuestros sitios Web, ya que Google desde hace un par de años está poniendo el foco en la seguridad en Internet (de hecho la considera una de las principales prioridades) y el buscador valora el soporte para HTTPS como un factor de peso al momento de posicionar.

  • Este artículo describe en resumen cómo crear tu propia Autoridad Certificante (CA) y cómo crear y firmar tus propios pedidos de certificados. Estos certificados sólo sirven para uso personal ya que no son firmados por una autoridad de confianza, como un mecanismo de proveer una forma segura de comunicarse con tus servicios, para que las contraseñas o cualquier dato no viaje plano por la red.

    Para realizar todos los pasos del tutorial se requiere el paquete openssl instalado en la máquina utilizada para administrar los certificados o crear los pedidos de certificado.

    Este tutorial fue probado en Debian 6.02, pero funciona para cualquier distribución.

  • Un certificado autofirmado puede ser útil para implementar SSL en entornos de desarrollo/testeo, o para el caso en que no se cuente con presupuesto suficiente para comprar uno firmado por una autoridad certificante de confianza (aunque algunas autoridades certificantes como namecheap ofrecen certificados económicos). Un certificado autofirmado no sirve para garantizar la identidad de un servidor, pero al menos provee un canal de comunicación seguro. Generar un certificado autofirmado también sirve para entender el proceso de creación y firma de un certificado y sus diferentes componentes.

  • En este artículo voy a explicar cómo habilitar el soporte para el protocolo HTTP versión 2 en Nginx. HTTP/2 es la nueva versión del protocolo HTTP que utilizamos a diario para navegar páginas y sitios Web. Está basado en el protocolo experimental SPDY (desarrollado originalmente por Google) y se trata de la primera actualización mayor de la versión en casi dos décadas (HTTP/1.1 fue lanzado en 1999).

    Las meta de desarrollo de esta nueva versión fue reducir la latencia, para mejorar la velocidad de carga de páginas en los navegadores. Para ello, se agregó compresión en los headers HTTP (a fin de reducir el tamaño de los mismos); un mecanismo de push para que los servidores puedan enviar datos a los navegadores de manera asincrónica (sin necesidad de un request); pipeline de solicitudes (para mejorar el ancho de banda) y multiplexado de solicitudes a través de una misma conexión TCP (para reducir la sobrecarga del mismo); entre otros. A su vez, se agregó un mecanismo de negociación para que los clientes puedan escoger entre HTTP/1.1, HTTP/2 u otro.

    Todo esto, manteniendo compatibilidad con la versión 1.1. HTTP/2 mantiene la sintaxis de alto nivel de HTTP/1.1 casi intacta, al igual que los códigos de estado, cabeceras, etc. Lo que cambia (mejora) es la forma en que los datos e información son transferidos.

  • Luego de implementar mi servidor OpenLDAP con PostgreSQL como backend, el siguiente paso consistió en configurar SSL/TLS para implementar un nivel de seguridad mínimo en las comunicaciones entre el servidor LDAP y los clientes.

    Aunque se trabaje sobre un entorno de pruebas o desarrollo, es indispensable contar con un certificado de confianza válido. Esto se debe a que OpenLDAP no permite utilizar un certificado autofirmado para utilizar en el servidor. De este modo tenemos varias alternativas: comprar un certificado firmado por una entidad de confianza; generar un certificado gratuito con certbot; o crear nuestra propia CA autofirmada.

    Crear nuestra propia CA tiene sus ventajas, ya que nos permite generar cualquier número de certificados y nos da mayor flexibilidad, aunque implica una mayor cantidad de trabajo al momento de configurar el servidor LDAP. Este artículo explica cómo configurar OpenLDAP para que haga uso de un certificado generado a través de nuestra propia CA (de forma similar a como lo hace OpenVPN).

  • Uno de mis artículos más visitados es Cómo crear tu propia autoridad certificante (CA), el cual explica cómo crear una Autoridad Certificante (conocida vulgarmente como "CA") utilizando OpenSSL, para crear certificados SSL autofirmados. En esta oportunidad voy a explicar cómo renovar certificados que han expirado o están próximos a expirar en GNU/Linux utilizando OpenSSL.

    En el momento de firmar un certificado SSL, la autoridad certificante lo certifica (valga la redundancia) por un determinado período de tiempo de validez, por ejemplo un año o dos. Una vez pasado este tiempo, el certificado deja de ser válido y no puede ser utilizado para establecer comunicaciones seguras. Por lo tanto es común que los certificados expiren y deban ser renovados frecuentemente.

  • Luego de montar un servidor VPN con OpenVPN, y dejarlo corriendo durante algunos años, puede llegar el momento de necesitar dar de baja un usuario (revocar su certificado OpenSSL), o conocer la lista de usuarios habilitados (cuyo certificado es válido) y deshabilitados (cuyo certificado ha sido revocado). Cabe recordar que para simplificar la gestión de certificados OpenSSL, OpenVPN cuenta con un conjunto de scripts Bash dentro del directorio easy-rsa, los cuales son sumamente útiles y prácticos para aquellos administradores que no cuentan con suficiente experiencia o no están familiarizados con OpenSSL.

  • Pasaron casi 5 años y llegó el día menos pensado: mi script para verificar periódicamente la validez de los certificados en mi servidor me avisó que el certificado de mi CA autofirmada está por expirar. Y ahora, ¿quién podrá defendernos?

    Este artículo explica cómo renovar el certificado de una CA autofirmada sin alterar el funcionamiento de los certificados válidos emitidos con anterioridad.

  • Una red privada virtual (VPN de las siglas en inglés de Virtual Private Network) es una tecnología de red que permite una extensión segura de la red local sobre una red pública o no controlada. Ejemplos comunes son la posibilidad de conectar dos o más sucursales de una empresa utilizando como vínculo Internet, permitir a los miembros del equipo de soporte técnico la conexión desde su casa al centro de cómputo, etc. Todo ello utilizando la infraestructura de Internet.

    Este artículo detalla los pasos de instalación y configuración de OpenVPN sobre un servidor Debian 6 ó Ubuntu 12.04 (para este artículo ha sido probado en ambos), para dar acceso remoto desde Internet hasta una red privada de un centro de cómputos. OpenVPN es una solución VPN basada en SSL, liberada bajo la licencia GPL y es el estándar de facto para crear una VPN en GNU/Linux.

  • El artículo Instalación y configuración de OpenVPN explicar en detalle la instalación y configuración de OpenVPN, lo cual incluye la generación de los certificados y la autoridad certificante (CA) para que los clientes puedan acceder de forma segura a la red privada virtual (VPN) utilizando openssl.

    Un tema que había quedado pendiente es la posterior administración de la CA (crear, renovar y revocar certificados) utilizando los scripts "easy-rsa" incluídos en el paquete openvpn.

    OpenVPN incluye una serie de scripts bash dentro del directorio "easy-rsa" para administrar la Autoridad Certificante de forma simple. Una gran ayuda para aquellos que no estén familiarizados con openssl y sus comandos básicos.

  • El artículo Cómo crear tu propia autoridad certificante (CA) explica cómo crear tu propia autoridad certificante para generar y firmar certificados para utilizar con SSL. Aquí presento un script para verificar periodicamente la validez de los certificados x509. La función del script es notificar por correo electrónico cuando un certificado está próximo a expirar, para poder renovarlo con tiempo y no sufrir problemas o interrupciones de los servicios que utilizan SSL (evitar dolores de cabeza).

  • Al momento de configurar los fuentes de Nginx en Debian, me encontré con que lo compilaría sin soporte para SSL, a pesar de contar con la librería de OpenSSL instalada, porque el script de configuración no detectaba la existencia de dicha librería, por estar en una ruta desconocida.

    
    Configuration summary
      + using system PCRE library
      + OpenSSL library is not used
      + using builtin md5 code
      + sha1 library is not found
      + using system zlib library
    
    
  • Este artículo presenta un resumen de las tareas de administración más habituales/frecuentes al trabajar con certificados y OpenSSL.

  • OpenSSL es el kit criptográfico que implementa los protocolos de red Secure Sockets Layer (SSL v2/v3) y Transport Layer Security (TLS v1), y los estándares criptográficos relacionados, para los sitemas operativos *nix (Solaris, GNU/Linux, Mac OS X y BSD), OpenVMS y Microsoft Windows.

    En GNU/Linux, la herramienta openssl permite utilizar varias funciones criptográficas de la librería OpenSSL desde línea de comandos. Se puede utilizar openssl para: crear y gestionar claves públicas y privadas; realizar operaciones criptográficas con clave pública; crear certificados, CSRs y CRLs X.509; calcular digests de mensajes; encriptar y desencriptar con diferentes algoritmos de cifrado; verificar clientes y servidores SSL/TLS; manipular mensajes de correo electrónico firmados o cifrados mediante S/MIME; entre otras funciones.