Los dos métodos más sencillos para averiguar los cifrados soportados por un host que tiene en escucha un puerto con SSL son utilizar nmap o SSLScan. Normalmente este tipo de tareas se realizan para securizar el servicio y evitar publicar cifrados no seguros u obsoletos.
Si se va a utilizar NMAP hay que asegurarse de tener disponible el script ssl-enum-ciphers. El script inicia conexiones contra el host utilizando en cada una un tipo de cifrado distinto, mostrando por salida estándar si el servidor acepta o no la conexión. Ejemplo:
# nmap --script ssl-enum-ciphers -p 443 192.168.1.100 PORT STATE SERVICE REASON 443/tcp open https syn-ack | ssl-enum-ciphers: | SSLv3: | ciphers: | TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - A | TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - A | TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C | compressors: | NULL | cipher preference: server | TLSv1.0: | ciphers: | TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - A | TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - A | TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C | TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 256) - A | TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 256) - A | compressors: | NULL | cipher preference: server |_ least strength: C
SSLScan hace lo mismo aunque muestra el resultado de forma bastante más ordenada y legible que nmap:
$ sslscan 192.168.1.100:443 _ ___ ___| |___ ___ __ _ _ __ / __/ __| / __|/ __/ _` | '_ \ \__ \__ \ \__ \ (_| (_| | | | | |___/___/_|___/\___\__,_|_| |_| Version 1.8.2 http://www.titania.co.uk Copyright Ian Ventura-Whiting 2009 Testing SSL server 192.168.1.100 on port 443 Supported Server Cipher(s): Rejected SSLv3 256 bits ADH-AES256-SHA Accepted SSLv3 256 bits DHE-RSA-AES256-SHA Rejected SSLv3 256 bits DHE-DSS-AES256-SHA Accepted SSLv3 256 bits AES256-SHA Rejected SSLv3 128 bits ADH-AES128-SHA [...]
SSLScan se puede instalar a partir de repositorios (apt, yum, etc).