Skip to content

Análisis SSL/TLS - OpenSSL, SSLScan y SSLyze

Análisis SSL/TLS: OpenSSL, SSLScan y SSLyze

Section titled “Análisis SSL/TLS: OpenSSL, SSLScan y SSLyze”

HTTP (Hypertext Transfer Protocol) es un protocolo de comunicación utilizado para la transferencia de datos en la World Wide Web. Se utiliza para la transferencia de contenido de texto, imágenes, videos, hipervínculos, etc. El puerto predeterminado para HTTP es el puerto 80.

HTTPS (Hypertext Transfer Protocol Secure) es una versión segura de HTTP que utiliza SSL/TLS para cifrar la comunicación entre el cliente y el servidor. Utiliza el puerto 443 por defecto.

La principal diferencia entre HTTP y HTTPS es que HTTPS utiliza una capa de seguridad adicional para cifrar los datos, lo que los hace más seguros para la transferencia.

Ventajas de HTTPS:

  • Confidencialidad: Los datos se cifran durante la transmisión
  • Integridad: Los datos no pueden ser modificados sin detección
  • Autenticación: Verifica la identidad del servidor
  • Confianza: Los usuarios ven el candado verde en el navegador
  • SEO: Google favorece los sitios HTTPS en rankings
  • SSL (Secure Sockets Layer): Protocolo más antiguo, versiones 1.0, 2.0, 3.0
  • TLS (Transport Layer Security): Evolución de SSL, versiones 1.0, 1.1, 1.2, 1.3

Hoy en día se usa TLS, aunque coloquialmente se sigue llamando “SSL”.

Los certificados digitales son documentos electrónicos que vinculan una clave pública con una identidad (persona, organización, servidor web).

Tipos de certificados:

  • DV (Domain Validated): Solo valida el dominio
  • OV (Organization Validated): Valida dominio y organización
  • EV (Extended Validation): Máxima validación con barra verde

Autoridades de Certificación (CA):

  • DigiCert, GlobalSign, Let’s Encrypt, Comodo, etc.

OpenSSL es una biblioteca de software libre y de código abierto que se utiliza para implementar protocolos de seguridad en línea, como TLS (Transport Layer Security) y SSL (Secure Sockets Layer). La biblioteca OpenSSL proporciona una implementación de estos protocolos para permitir que las aplicaciones se comuniquen de manera segura y encriptada a través de la red.

Terminal window
# En distribuciones basadas en Debian/Ubuntu
sudo apt update && sudo apt install openssl
# En CentOS/RHEL/Fedora
sudo yum install openssl # CentOS/RHEL
sudo dnf install openssl # Fedora
# En macOS
brew install openssl
# Compilación desde código fuente
wget https://www.openssl.org/source/openssl-3.0.7.tar.gz
tar -xf openssl-3.0.7.tar.gz
cd openssl-3.0.7
./config
make
sudo make install
Terminal window
# Comando básico para inspeccionar certificado
openssl s_client -connect ejemplo.com:443
# Con más detalles y salida limpia
openssl s_client -connect ejemplo.com:443 -servername ejemplo.com | openssl x509 -noout -text
# Solo información del certificado
openssl s_client -connect ejemplo.com:443 -servername ejemplo.com 2>/dev/null | openssl x509 -noout -text
Terminal window
# Verificar la cadena completa de certificados
openssl s_client -connect ejemplo.com:443 -showcerts
# Guardar certificados en archivos separados
openssl s_client -connect ejemplo.com:443 -showcerts </dev/null 2>/dev/null | awk '/BEGIN CERTIFICATE/,/END CERTIFICATE/ {print > "cert" NR ".pem"}'
Terminal window
# Información básica del certificado
openssl s_client -connect ejemplo.com:443 2>/dev/null | openssl x509 -noout -subject -issuer -dates
# Verificar validez
openssl s_client -connect ejemplo.com:443 2>/dev/null | openssl x509 -noout -checkend 0
# Fingerprint del certificado
openssl s_client -connect ejemplo.com:443 2>/dev/null | openssl x509 -noout -fingerprint -sha256
Terminal window
# Ver cifrados soportados por el servidor
openssl s_client -connect ejemplo.com:443 -cipher 'ALL:eNULL' | grep "Cipher is"
# Probar un cifrado específico
openssl s_client -connect ejemplo.com:443 -cipher AES128-SHA
# Ver todas las suites de cifrado disponibles
openssl ciphers -v
Terminal window
# Generar clave privada
openssl genrsa -out private.key 2048
# Generar CSR (Certificate Signing Request)
openssl req -new -key private.key -out certificate.csr
# Generar certificado autofirmado
openssl req -x509 -new -key private.key -out certificate.crt -days 365
# Ver contenido de un certificado
openssl x509 -in certificate.crt -text -noout
# Convertir formatos
openssl x509 -in cert.pem -outform der -out cert.der # PEM a DER
openssl x509 -in cert.der -inform der -out cert.pem # DER a PEM
#!/bin/bash
# check_ssl_cert.sh - Monitorea expiración de certificados SSL
DOMAINS=("ejemplo.com" "api.ejemplo.com" "admin.ejemplo.com")
WARNING_DAYS=30
CRITICAL_DAYS=7
for domain in "${DOMAINS[@]}"; do
echo "Verificando $domain..."
# Obtener fecha de expiración
expire_date=$(openssl s_client -connect "$domain:443" -servername "$domain" 2>/dev/null | openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2)
if [ -z "$expire_date" ]; then
echo "❌ ERROR: No se pudo obtener información del certificado para $domain"
continue
fi
# Convertir a timestamp
expire_timestamp=$(date -d "$expire_date" +%s)
current_timestamp=$(date +%s)
# Calcular días restantes
days_left=$(( (expire_timestamp - current_timestamp) / 86400 ))
if [ $days_left -le $CRITICAL_DAYS ]; then
echo "🚨 CRÍTICO: $domain expira en $days_left días ($expire_date)"
elif [ $days_left -le $WARNING_DAYS ]; then
echo "⚠️ ADVERTENCIA: $domain expira en $days_left días ($expire_date)"
else
echo "✅ OK: $domain expira en $days_left días ($expire_date)"
fi
echo ""
done
#!/bin/bash
# weak_ciphers_check.sh - Verifica cifrados débiles
TARGET=$1
WEAK_CIPHERS=("NULL" "EXPORT" "RC4" "DES" "3DES" "MD5")
if [ -z "$TARGET" ]; then
echo "Uso: $0 <dominio>"
exit 1
fi
echo "Verificando cifrados débiles en $TARGET..."
echo "========================================"
for cipher in "${WEAK_CIPHERS[@]}"; do
echo "Probando cifrados $cipher..."
result=$(openssl s_client -connect "$TARGET:443" -cipher "$cipher" 2>&1 | grep "Cipher is")
if [ $? -eq 0 ]; then
echo "❌ VULNERABLE: Cifrado $cipher soportado"
echo " $result"
else
echo "✅ Seguro: Cifrado $cipher no soportado"
fi
echo ""
done

SSLScan es una herramienta de línea de comandos que se utiliza para evaluar la configuración SSL/TLS de un servidor web. Proporciona información detallada sobre los protocolos SSL/TLS admitidos, el cifrado utilizado y los certificados SSL.

Terminal window
# Instalación en Kali Linux
sudo apt update && sudo apt install sslscan
# Compilación desde código fuente
git clone https://github.com/rbsec/sslscan.git
cd sslscan
make static
sudo cp sslscan /usr/local/bin/
Terminal window
# Escaneo básico
sslscan ejemplo.com
# Escaneo con puerto específico
sslscan ejemplo.com:443
# Escaneo con opciones avanzadas
sslscan --no-colour --show-certificate ejemplo.com
OpciónDescripción
--no-colourSalida sin colores
--show-certificateMuestra detalles del certificado
--show-ciphersLista todos los cifrados probados
--ssl2Fuerza uso de SSLv2 (deshabilitado por defecto)
--ssl3Fuerza uso de SSLv3 (deshabilitado por defecto)
--tls10Fuerza uso de TLS 1.0
--tls11Fuerza uso de TLS 1.1
--starttls-smtpUsar STARTTLS para SMTP
--starttls-imapUsar STARTTLS para IMAP
--starttls-pop3Usar STARTTLS para POP3
Terminal window
# Escaneo completo con todos los detalles
sslscan --no-colour --show-certificate --show-ciphers ejemplo.com
Terminal window
# Verificar Heartbleed
sslscan --no-colour --heartbleed ejemplo.com
# Verificar POODLE (SSLv3)
sslscan --no-colour --ssl3 ejemplo.com
# Verificar soporte para protocolos inseguros
sslscan --no-colour ejemplo.com | grep -E "(SSLv2|SSLv3|TLSv1.0|TLSv1.1)"
Terminal window
# Obtener información detallada del certificado
sslscan --no-colour --show-certificate ejemplo.com | grep -A 20 "Certificate"
Terminal window
# Verificar configuración recomendada
sslscan --no-colour ejemplo.com | grep -E "(Accepted|Preferred|Signature Algorithm)"
  • 🟢 Verde: Configuraciones seguras
  • 🟡 Amarillo: Configuraciones aceptables pero mejorables
  • 🔴 Rojo: Configuraciones inseguras o vulnerables
  • TLS 1.2 y TLS 1.3: Seguros
  • ⚠️ TLS 1.0 y TLS 1.1: Obsoletos, deben deshabilitarse
  • SSL 2.0 y SSL 3.0: Inseguros, nunca usar
  • AES-GCM: Cifrados modernos recomendados
  • ChaCha20-Poly1305: Bueno para móviles
  • ⚠️ AES-CBC: Aceptable pero vulnerable a ataques
  • RC4, DES, 3DES: Inseguros
  • NULL: Sin cifrado

SSLyze es una herramienta de análisis de seguridad SSL/TLS más avanzada que SSLScan. Se enfoca en la evaluación exhaustiva de la configuración SSL/TLS de un servidor web, proporcionando información detallada sobre cifrados, protocolos, certificados y vulnerabilidades.

Terminal window
# Usando pip (recomendado)
pip3 install sslyze
# Desde código fuente
git clone https://github.com/nabla-c0d3/sslyze.git
cd sslyze
pip3 install -r requirements.txt
python setup.py install
# Usando Docker
docker run -it --rm nablac0d3/sslyze:latest sslyze --help
Terminal window
# Escaneo básico
sslyze ejemplo.com
# Escaneo con opciones específicas
sslyze --regular ejemplo.com
# Escaneo completo (todos los plugins)
sslyze --regular --certinfo --hide_rejected_ciphers --compression --heartbleed --openssl_ccs --fallback ejemplo.com

Proporciona información detallada sobre el certificado SSL/TLS.

Terminal window
sslyze --certinfo ejemplo.com

2. sslv2, sslv3, tlsv1, tlsv1_1, tlsv1_2, tlsv1_3

Section titled “2. sslv2, sslv3, tlsv1, tlsv1_1, tlsv1_2, tlsv1_3”

Verifica soporte para diferentes versiones de protocolos.

Terminal window
# Verificar todas las versiones de protocolo
sslyze --sslv2 --sslv3 --tlsv1 --tlsv1_1 --tlsv1_2 --tlsv1_3 ejemplo.com
# Verificar solo versiones seguras
sslyze --tlsv1_2 --tlsv1_3 ejemplo.com

Verifica si el servidor soporta session resumption.

Terminal window
sslyze --resumption ejemplo.com

Verifica si el servidor es vulnerable a ataques CRIME (compresión).

Terminal window
sslyze --compression ejemplo.com

Verifica vulnerabilidad Heartbleed.

Terminal window
sslyze --heartbleed ejemplo.com

Verifica vulnerabilidad OpenSSL CCS.

Terminal window
sslyze --openssl_ccs ejemplo.com

Verifica si el servidor soporta downgrade attacks.

Terminal window
sslyze --fallback ejemplo.com
Terminal window
# Escaneo completo recomendado
sslyze --regular \
--certinfo \
--hide_rejected_ciphers \
--compression \
--heartbleed \
--openssl_ccs \
--fallback \
--reneg \
--resum \
ejemplo.com
Terminal window
# Verificar Perfect Forward Secrecy
sslyze --regular --hide_rejected_ciphers ejemplo.com | grep -A 10 -B 10 "Forward Secrecy"
Terminal window
# Verificar cadena de certificados
sslyze --certinfo --hide_rejected_ciphers ejemplo.com | grep -A 50 "Certificate"
#!/bin/bash
# ssl_monitor.sh - Monitoreo continuo de configuración SSL
TARGET="ejemplo.com"
LOG_FILE="ssl_monitor_$(date +%Y%m%d).log"
echo "Iniciando monitoreo SSL de $TARGET" | tee -a "$LOG_FILE"
echo "Fecha: $(date)" | tee -a "$LOG_FILE"
echo "========================================" | tee -a "$LOG_FILE"
# Escaneo completo
sslyze --regular --certinfo --compression --heartbleed --openssl_ccs --fallback "$TARGET" | tee -a "$LOG_FILE"
echo "" | tee -a "$LOG_FILE"
echo "Monitoreo completado: $(date)" | tee -a "$LOG_FILE"
CaracterísticaOpenSSLSSLScanSSLyze
ComplejidadBajaMediaAlta
VelocidadMuy rápidaRápidaMedia
ProfundidadMediaAltaMuy alta
Facilidad de usoMediaAltaMedia
VulnerabilidadesBásicasComunesAvanzadas
CertificadosDetalladoBásicoCompleto
AutomatizaciónLimitadaBuenaExcelente

Descripción: Vulnerabilidad en OpenSSL que permite a atacantes leer memoria del servidor.

Impacto: Acceso a claves privadas, nombres de usuario, contraseñas, etc.

Detección:

Terminal window
# Con SSLyze
sslyze --heartbleed ejemplo.com
# Con SSLScan
sslscan --heartbleed ejemplo.com

Mitigación: Actualizar OpenSSL a versión 1.0.1g o superior.

Descripción: Ataque que explota SSLv3 para realizar ataques man-in-the-middle.

Impacto: Descifrado de datos encriptados.

Detección:

Terminal window
# Verificar soporte SSLv3
sslyze --sslv3 ejemplo.com
sslscan --ssl3 ejemplo.com

Mitigación: Deshabilitar SSLv3, usar solo TLS 1.2+.

Descripción: Ataque que explota compresión TLS para robar cookies.

Impacto: Robo de cookies de sesión.

Detección:

Terminal window
sslyze --compression ejemplo.com

Mitigación: Deshabilitar compresión TLS.

Descripción: Ataque que explota cifrados CBC en TLS 1.0.

Impacto: Descifrado de datos encriptados.

Detección:

Terminal window
sslyze --tlsv1 ejemplo.com | grep "CBC"

Mitigación: Usar TLS 1.1+ o cifrados AEAD (AES-GCM).

Descripción: Ataque de downgrade que fuerza el uso de cifrados débiles.

Impacto: Degradación de seguridad a niveles export.

Detección:

Terminal window
sslyze --fallback ejemplo.com

Mitigación: Deshabilitar cifrados de 512 bits, usar DH parameters de 2048+ bits.

  • TLS 1.3 (máxima seguridad)
  • TLS 1.2 (muy seguro)
  • TLS 1.0/1.1 (obsoletos)
  • SSL 2.0/3.0 (inseguros)
ECDHE-RSA-AES256-GCM-SHA384
ECDHE-RSA-AES128-GCM-SHA256
ECDHE-RSA-AES256-SHA384
ECDHE-RSA-AES128-SHA256

Apache:

/etc/apache2/sites-available/default-ssl.conf
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256
SSLHonorCipherOrder on

Nginx:

/etc/nginx/nginx.conf
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;
  • Usar certificados de 2048 bits o más
  • Implementar HSTS (HTTP Strict Transport Security)
  • Configurar renovación automática (Let’s Encrypt)
  • Usar certificados wildcard cuando sea apropiado
#!/bin/bash
# ssl_monitoring.sh - Monitoreo completo SSL/TLS
TARGETS=("ejemplo.com" "api.ejemplo.com" "admin.ejemplo.com")
REPORT_DIR="ssl_reports"
mkdir -p "$REPORT_DIR"
for target in "${TARGETS[@]}"; do
echo "Analizando $target..."
# Crear directorio para el target
target_dir="$REPORT_DIR/$(date +%Y%m%d)_$target"
mkdir -p "$target_dir"
# SSLyze completo
sslyze --regular --certinfo --compression --heartbleed --openssl_ccs --fallback "$target" > "$target_dir/sslyze_report.txt"
# SSLScan
sslscan --no-colour "$target" > "$target_dir/sslscan_report.txt"
# OpenSSL básico
echo "Q" | openssl s_client -connect "$target:443" -servername "$target" 2>/dev/null | openssl x509 -noout -text > "$target_dir/openssl_cert.txt"
# Verificar expiración
expire_date=$(openssl s_client -connect "$target:443" -servername "$target" 2>/dev/null | openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2)
if [ ! -z "$expire_date" ]; then
days_left=$(( ($(date -d "$expire_date" +%s) - $(date +%s)) / 86400 ))
echo "Días hasta expiración: $days_left" > "$target_dir/expiration.txt"
if [ $days_left -le 30 ]; then
echo "⚠️ ALERTA: Certificado expira pronto ($days_left días)" >> "$target_dir/expiration.txt"
fi
fi
echo "Reportes generados en $target_dir"
done
echo "Monitoreo SSL completado."

Permitido:

  • Análisis de tus propios servidores
  • Pruebas con autorización escrita
  • Investigación académica
  • Auditorías de seguridad autorizadas

Prohibido:

  • Escaneo de servidores ajenos sin permiso
  • Uso para actividades maliciosas
  • Violación de términos de servicio
  • Acceso no autorizado a información

Estados Unidos:

  • CFAA (Computer Fraud and Abuse Act): Prohibe acceso no autorizado
  • DMCA: Protección de propiedad intelectual

Unión Europea:

  • GDPR: Protección de datos personales
  • NIS Directive: Seguridad de infraestructuras críticas

Consideraciones importantes:

  • Obtener permiso por escrito antes de cualquier análisis
  • Documentar toda la metodología utilizada
  • No almacenar información sensible obtenida
  • Reportar vulnerabilidades encontradas de manera responsable

Si encuentras vulnerabilidades durante un análisis autorizado:

  1. No explotes la vulnerabilidad
  2. Documenta los hallazgos detalladamente
  3. Reporta al propietario del sistema
  4. Espera confirmación antes de divulgar públicamente
Terminal window
# TestSSL.sh - Herramienta avanzada de testing SSL
git clone https://github.com/drwetter/testssl.sh.git
cd testssl.sh
./testssl.sh ejemplo.com
# SSL Labs API
# Verificación automática de calificación SSL Labs
curl -s "https://api.ssllabs.com/api/v3/analyze?host=ejemplo.com" | jq .
# SSL Certificate Checker (online)
# https://www.sslshopper.com/ssl-checker.html
  • OWASP Testing Guide: Guías de testing SSL/TLS
  • NIST SP 800-52: Guías de seguridad TLS
  • Mozilla SSL Configuration Generator: https://ssl-config.mozilla.org/

El análisis SSL/TLS es fundamental para garantizar la seguridad de las comunicaciones web. Las herramientas OpenSSL, SSLScan y SSLyze proporcionan diferentes niveles de profundidad y funcionalidad:

  • OpenSSL: Ideal para inspección rápida y gestión de certificados
  • SSLScan: Perfecto para evaluaciones rápidas de configuración SSL
  • SSLyze: La herramienta más completa para análisis exhaustivo de seguridad

Puntos clave a recordar:

  1. HTTPS es esencial para la seguridad web moderna
  2. TLS 1.3 ofrece la máxima seguridad actual
  3. Los certificados deben renovarse antes de expirar
  4. Las vulnerabilidades conocidas deben parchearse inmediatamente
  5. El monitoreo continuo es crucial para mantener la seguridad

Recuerda: Siempre obtén autorización por escrito antes de realizar cualquier análisis SSL/TLS en sistemas que no te pertenecen. La seguridad debe ser proactiva, no reactiva.


Última actualización: 2025-01-23 Versión: 2.0