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).