While Nessus is a wonderful vulnerability scanner, sometimes it is too slow and resource heavy for individual issues. The following 2 equivalent scripts perform checks for the following SSL related Nessus plugins: * 20007: SSL Version 2 (v2) Protocol Detection * 26928: SSL Weak Cipher Suites Supported * 31705: SSL Anonymous Cipher Suites Supported The first is the curl version: #!/bin/bash # phaas at redspin.com: Never us a 'sh when a bash is necessary # Checks the Equivalent of Nessus Plugin 20007, 26928 and 31705 (10863+21643) if [ $# -lt 1 ] then echo "List SSL Weakness present for a given website" echo "Usage: `basename $0` website {port}" exit 1 fi web=${1-'www.redspin.com'} port=${2-'443'} # Check for the insecure SSLv2 version curl -m1 -Ik "https://$web:$port" --ciphers sslv2 &> /dev/null if [[ "$?" -eq 0 ]]; then echo -e "$web:$port: (ssl2) Weak SSLv2 encryption enabled"; fi # Enumerate weak SSL ciphers using curl IFS=$'\n' # Loop across lines, rather than words ciphers='LOW:EXP:eNULL:aNULL' # Include EXP (Export Ciphers) for line in `openssl ciphers -v $ciphers | tr -s ' '`; do version=`echo "$line" | cut -d' ' -f2 | tr [:upper:] [:lower:]` cipher=`echo "$line" | cut -d' ' -f1` auth=`echo "$line" | tr -s ' ' | grep -o "Au=[^ ]*" | cut -d'=' -f2` strength=`echo "$line" | sed 's#Kx=[^ ]*##' | grep -o '([0-9]*)' | tr -d '()' | grep -v 'None'` if [[ "$auth" == 'None' ]]; then auth="no"; fi if [[ -z "$strength" ]]; then strength="without encryption"; else strength="at $strength bit encryption"; fi #echo "curl -m1 -Ik https://$web:$port --ciphers $cipher -$version &> /dev/null" curl -m1 -Ik "https://$web:$port" --ciphers "$cipher" -$version &> /dev/null if [[ "$?" -eq 0 ]]; then echo -e "$web:$port: ($version) $cipher = Supported $strength with $auth authentication support" fi done And the following is the openssl version: #!/bin/bash # phaas at redspin.com: Never us a 'sh when a bash is necessary # Checks the Equivalent of Nessus Plugin 20007, 26928 and 31705 (10863+21643) if [ $# -lt 1 ] then echo "List SSL Weakness present for a given website" echo "Usage: `basename $0` website {port}" exit 1 fi web=${1-'www.redspin.com'} port=${2-'443'} # Check for the insecure SSLv2 version sslv2=`echo -e '' | openssl s_client -connect $web:$port -ssl2 -no_ssl3 -no_tls1 2>/dev/null | grep -i 'SSLv2'` if [ -n "$sslv2" ]; then echo -e "$web:$port: (ssl2) Weak SSLv2 encryption enabled"; fi # Enumerate weak SSL ciphers using openssl IFS=$'\n' # Loop across lines, rather than words ciphers='LOW:EXP:eNULL:aNULL' # Include EXP (Export Ciphers) for line in `openssl ciphers -v $ciphers | tr -s ' '`; do version=`echo "$line" | cut -d' ' -f2 | tr [:upper:] [:lower:] | tr -d 'v'` cipher=`echo "$line" | cut -d' ' -f1` auth=`echo "$line" | tr -s ' ' | grep -o "Au=[^ ]*" | cut -d'=' -f2` strength=`echo "$line" | sed 's#Kx=[^ ]*##' | grep -o '([0-9]*)' | tr -d '()' | grep -v 'None'` if [[ "$auth" == 'None' ]]; then auth="no"; fi if [[ -z "$strength" ]]; then strength="without encryption"; else strength="at $strength bit encryption"; fi #echo "openssl s_client -connect $web:$port -$version -cipher $cipher" supported=`echo "" | openssl s_client -connect $web:$port -$version -cipher $cipher 2>&1 | grep DONE` if [[ -n "$supported" ]]; then echo -e "$web:$port: ($version) $cipher = Supported $strength with $auth authentication support" fi done I decided to include both because while openssl is usually included by default on most Linux distributions, curl is easier to obtain on Windows machines. Credit to Paul Haas and Jason Haddix from the Redspin Engineering Team.