Portada del artículo sobre testssl.sh para auditar la seguridad SSL/TLS de servidores web, con un fondo de centro de datos e iconos de ciberseguridad.
Una auditoría exhaustiva con testssl.sh es fundamental para garantizar la seguridad de la configuración SSL/TLS de un servidor.

testssl.sh: Auditar la configuración SSL/TLS de servidores web

La seguridad de los intercambios en la web depende en gran medida de la robustez de los protocolos de cifrado utilizados. Sin embargo, implementar un certificado SSL/TLS no es suficiente: una configuración incorrecta del servidor web o el uso de suites criptográficas obsoletas pueden hacer que tus intercambios sean vulnerables.

Entonces, ¿cómo auditar SSL/TLS de forma eficaz? Es lo que veremos a continuación.

En este tutorial, aprenderás a realizar una auditoría TLS con la herramienta testssl.sh. A diferencia de los escáneres en línea como el de Qualys SSL Labs (que seguramente conoces), testssl.sh es una solución de línea de comandos que puede auditar cualquier servidor, ya sea en Internet, en tu red local (LAN) o incluso en tu máquina de desarrollo.

Es pertinente utilizar este tipo de herramienta para validar la configuración de un servicio web (ya sea que se ejecute a través de Apache, Nginx, IIS, Caddy, etc.) antes de su puesta en producción, o para realizar auditorías de cumplimiento normativo de forma regular en los servicios web.

Ilustración que representa cómo el protocolo TLS protege la conexión entre un servidor y un cliente, un concepto clave al auditar con testssl.sh.
Una configuración SSL/TLS robusta es la primera línea de defensa de cualquier servidor web.

¿Qué es testssl.sh?

Testssl.sh es una herramienta de análisis de cifrado SSL/TLS de código abierto, gratuita y mantenida por una comunidad activa. Escrita en Bash, se basa principalmente en OpenSSL para analizar la configuración de un servicio web. La herramienta no se limita a comprobar la validez del certificado SSL en cuanto a su validez, sino que realiza una serie de pruebas exhaustivas:

  • Verificación de los protocolos soportados (SSLv2, SSLv3, TLS 1.0 a 1.3).
  • Análisis de las suites de cifrado (Ciphers) y su orden de preferencia.
  • Pruebas de robustez frente a vulnerabilidades conocidas (Heartbleed, POODLE, CCS Injection, etc.).
  • Verificación de las cabeceras de seguridad HTTP como HSTS,
  • Y mucho más.

Funciona en cualquier distribución de Linux, macOS y FreeBSD, lo que le asegura una cierta portabilidad. Gracias a WSL, también es posible usar testssl.sh en Windows (o mediante MSYS2, Cygwin). Adicionalmente, existe una imagen de Docker disponible, lo que refuerza la portabilidad de esta herramienta.

Puedes consultar el repositorio de GitHub de testssl.sh para ver su código fuente y desarrollo activo.

Instalación y uso de testssl.sh

La instalación de testssl.sh es simple, ya que solo tienes que clonar el repositorio de GitHub del proyecto para ejecutar el script. Se apoya en OpenSSL de forma local, pero este último generalmente ya está presente en los sistemas Linux.

Instalación en Linux

El método más sencillo es clonar el repositorio de testssl.sh en GitHub. Abre tu terminal e instala primero Git si es necesario:

sudo apt update
sudo apt install git

A continuación, clona el repositorio y entra en el directorio. Este comando descargará la versión más reciente disponible desde la rama principal del proyecto, lo cual es una práctica habitual cuando se desea trabajar con la versión actual mantenida por la comunidad.

git clone --depth 1 https://github.com/testssl/testssl.sh.git

Cloning into 'testssl.sh'...
remote: Enumerating objects: 104, done.
remote: Counting objects: 100% (104/104), done.
remote: Compressing objects: 100% (97/97), done.
remote: Total 104 (delta 12), reused 43 (delta 7), pack-reused 0 (from 0)
Receiving objects: 100% (104/104), 7.35 MiB | 33.3 MiB/s, done.
Resolving deltas: 100% (12/12), done.

Sitúate en el directorio de la herramienta. Si es necesario, añade los permisos de ejecución sobre el script Bash testssl.sh (en principio, ya deberían estar correctos).

cd testssl.sh
chmod +x testssl.sh

Ahora puedes verificar que la herramienta funciona mostrando su ayuda:

./testssl.sh --help
Captura de la salida del comando de ayuda de testssl.sh en una terminal de Kali Linux, mostrando las opciones y sintaxis disponibles.
Ejecutar el comando con la opción ‘–help’ es el primer paso para descubrir todas las capacidades de la herramienta.

Uso a través de Docker

Para quienes prefieren no instalar dependencias en su sistema anfitrión, la imagen oficial de testssl.sh con Docker es una alternativa recomendada. Este método es especialmente adecuado para entornos de CI/CD y garantiza que siempre utilizas la versión más reciente de la herramienta sin afectar tu sistema.

docker run --rm -it ghcr.io/testssl/testssl.sh <host>

Lanzar una auditoría TLS con testssl.sh

El uso básico de testssl.sh consiste simplemente en proporcionar la URL o la dirección IP (y el puerto si es diferente de 443) del host a analizar. La sintaxis es la siguiente:

./testssl.sh <nombre de dominio o host>
Salida de un informe de testssl.sh que muestra los resultados del escaneo de protocolos SSL/TLS con códigos de color.
Ejemplo del informe detallado que genera testssl.sh al iniciar un escaneo contra un host.

El script iniciará entonces una serie de pruebas y, a medida que avance, se mostrará el resultado en la consola. Se utilizan diferentes colores para facilitar la lectura e interpretación de los resultados.

  • Verde: la configuración es segura (conforme a las recomendaciones) o la vulnerabilidad no está presente.
  • Blanco: información neutra.
  • Amarillo: advertencia (suite de cifrado débil, protocolo obsoleto pero a veces necesario).
  • Rojo: problema de seguridad grave.

La prueba puede tardar cerca de 10 minutos, tiempo necesario para realizar un análisis completo. Para acelerar el escaneo, puedes usar la opción --fast. Ten en cuenta que esta opción reduce la profundidad de algunas pruebas (verifica menos suites de cifrado, por ejemplo), pero ofrece una visión general rápida.

Comprender las secciones del informe

El informe estándar se divide en varios bloques lógicos, comenzando por la sección Testing protocols via sockets except NPN+ALPN. Cada sección representa un conjunto de pruebas, entre las que se encuentran:

  • Testing protocols: enumera los protocolos activados. Idealmente, solo deberías ver TLS 1.2 y TLS 1.3 en verde. SSLv2, SSLv3, TLS 1.0 y 1.1 deben aparecer como «not offered». Aunque a veces, por razones de retrocompatibilidad, la realidad puede ser diferente.
  • Testing cipher categories: indica qué categorías de algoritmos de cifrado son aceptadas por el servidor, como el cifrado NULL (lo que sería una posible vulnerabilidad). Esto se acompaña de una sección que detalla las preferencias del servidor para el cifrado.
  • Testing robust forward secrecy: verifica si el servidor soporta la confidencialidad directa (Perfect Forward Secrecy, PFS), garantizando que el robo de la clave privada del servidor hoy no permitirá descifrar sesiones pasadas.
  • Testing server defaults: analiza la cadena de certificación y muestra los detalles de todos los certificados TLS asociados.
  • Testing HTTP header response: analiza el código HTTP obtenido, así como las diferentes cabeceras, incluyendo la sección de Security headers.
  • Testing vulnerabilities: el script prueba la presencia de vulnerabilidades SSL conocidas como Heartbleed, ROBOT o Logjam.
Informe de testssl.sh mostrando la detección de la vulnerabilidad SWEET32 en rojo y la falta de HSTS en las cabeceras HTTP.
La sección de vulnerabilidades es clave para identificar fallos críticos como SWEET32 en la configuración del servidor.

Se realizan otras pruebas, como simulaciones de conexión desde diversos tipos de clientes (Chrome, Edge, Safari, Android, OpenSSL, etc.) para ver cómo el servidor gestiona estas diferentes conexiones (especialmente el protocolo utilizado).

Es importante señalar que los resultados no reflejan necesariamente la configuración local de tu servidor. De hecho, si utilizas un sistema como Cloudflare, serán los parámetros de este servicio los que analizará testssl.sh, y no la configuración directa de tu servidor.

Finalmente, la prueba concluye con un resumen global donde se devuelve una calificación basada en el sistema de evaluación del conocido servicio SSL Labs (descrito en esta página oficial). A continuación, un ejemplo:

Rating (experimental)

Rating specs (not complete)  SSL Labs's 'SSL Server Rating Guide' (version 2009r from 2025-05-16)
Specification documentation  https://github.com/ssllabs/research/wiki/SSL-Server-Rating-Guide
Protocol Support (weighted)  95 (28)
Key Exchange   (weighted)    90 (27)
Cipher Strength (weighted)   90 (36)
Final Score                  91
Overall Grade                B

Grade cap reasons            Grade capped to B. TLS 1.1 offered
                             Grade capped to B. TLS 1.0 offered

Afinar la prueba con las opciones de testssl.sh

Lanzar un escaneo completo puede llevar tiempo y, en ocasiones, es posible que quieras probar solo un aspecto específico. Testssl.sh ofrece esta posibilidad gracias a las diferentes opciones disponibles como argumentos de la línea de comandos. Puedes combinar varias opciones.

Utiliza la siguiente sintaxis, entre otros ejemplos de testssl.sh:

./testssl.sh [opciones] <nombre de dominio o host>

Verificar únicamente los protocolos

Si simplemente deseas saber si un servidor ha desactivado los protocolos SSL/TLS antiguos, utiliza la opción -p:

./testssl.sh -p <nombre de host o IP>

Esto mostrará únicamente la sección relativa a SSLv2, SSLv3 y las versiones de TLS.

Probar únicamente las vulnerabilidades

Para verificar si un servidor está parcheado contra las vulnerabilidades conocidas sin listar todos los ciphers, utiliza la opción -U:

./testssl.sh -U <nombre de host o IP>

Escanear servicios no HTTP

Testssl.sh no se limita a HTTPS. Puede escanear cualquier servicio que utilice TLS, como un servidor de correo (SMTP, IMAP) o un servidor FTP. El script a menudo detecta el protocolo automáticamente, pero es preferible especificarlo con la opción -t indicando el protocolo del servicio.

La documentación de la herramienta indica soporte para los siguientes servicios (correspondientes a protocolos): ftp, smtp, lmtp, pop3, imap, xmpp, xmpp-server, telnet, ldap, nntp, sieve, postgres, mysql.

Para probar un servidor SMTP con STARTTLS:

./testssl.sh -t smtp smtp.dominio.es:25

Generar informes para la auditoría

Informe HTML

Es el formato más legible para los humanos. Genera un archivo HTML autónomo, manteniendo la visualización de las pruebas en el terminal. El informe HTML testssl.sh es similar a la salida del terminal, pero formateado en HTML.

./testssl.sh --htmlfile informe_tls.html www.dominio.es

Puedes abrir este archivo en cualquier navegador para presentar los resultados a un cliente, a tu superior o simplemente para guardar un registro.

Informe JSON

Para la automatización (integración en un pipeline, por ejemplo), el formato JSON es más pertinente que el informe HTML. En este caso, la sintaxis a adoptar es la siguiente:

./testssl.sh --jsonfile-pretty informe.json https://mi-intranet.local

Conclusión

Testssl.sh es una de las mejores herramientas para escanear vulnerabilidades de código abierto y muy práctica para auditar configuraciones TLS/SSL desde la línea de comandos.

Tiene pocas dependencias y funciona de forma local sin requerir servicios de terceros. Más allá de los servicios web, su compatibilidad con servicios no web (SMTP, FTP, bases de datos, etc.) amplía su alcance.

Como buena práctica, tras cada auditoría es recomendable documentar los hallazgos, desactivar protocolos obsoletos, eliminar suites débiles y repetir la prueba para validar los cambios antes de cerrar el proceso de hardening.

Preguntas Frecuentes (FAQ) sobre testssl.sh

¿Qué es mejor, testssl.sh vs Qualys SSL Labs?

No son excluyentes, más bien complementarios. Qualys SSL Labs es una herramienta web excelente, fácil de usar y reconocida para servidores públicos. testssl.sh es superior cuando necesitas auditar servidores en tu red local (intranet), máquinas de desarrollo, automatizar escaneos mediante scripts o integrar las pruebas en un pipeline de CI/CD.

¿Es testssl.sh una herramienta de hacking?

Es una herramienta de auditoría de seguridad. Como muchas herramientas de este tipo, puede ser utilizada tanto de forma defensiva como ofensiva. Un administrador de sistemas la usa para fortalecer sus servidores (hardening). Un profesional de la ciberseguridad (hacker ético) la usa para encontrar debilidades durante una prueba de penetración autorizada. Su propósito es diagnosticar, no explotar.

¿Cómo interpreto rápidamente los colores del informe?

Es un sistema de semáforo muy intuitivo:
Verde: ¡Bien! La configuración es segura o la vulnerabilidad no existe.
Amarillo: ¡Atención! Es una advertencia sobre algo que podría ser un riesgo, como un protocolo antiguo o una suite de cifrado débil.
Rojo: ¡Peligro! Indica un problema de seguridad grave que requiere acción inmediata.
Blanco: Informativo. Son datos neutrales, como la versión del servidor.

Mi Carro Close (×)

Tu carrito está vacío
Ver tienda