Ich habe ein Bash-Skript geschrieben, um Chiffre-Suites zu testen. Es erhält eine Liste der unterstützten Chiffriersätze von OpenSSL und versucht, eine Verbindung herzustellen. Wenn der Handshake erfolgreich ist, wird gedruckt YES
. Wenn der Handshake nicht erfolgreich ist, wird gedruckt NO
, gefolgt vom OpenSSL-Fehlertext.
#!/usr/bin/env bash # OpenSSL requires the port number. SERVER=$1 DELAY=1 ciphers=$(openssl ciphers 'ALL:eNULL' | sed -e 's/:/ /g') echo Obtaining cipher list from $(openssl version). for cipher in $ do echo -n Testing $cipher... result=$(echo -n | openssl s_client -cipher "$cipher" -connect $SERVER 2>&1) if [[ "$result" =~ ":error:" ]] ; then error=$(echo -n $result | cut -d':' -f6) echo NO \($error\) else if [[ "$result" =~ "Cipher is $" || "$result" =~ "Cipher :" ]] ; then echo YES else echo UNKNOWN RESPONSE echo $result fi fi sleep $DELAY done
Beispielausgabe mit drei nicht unterstützten Chiffren und einer unterstützten Chiffre:
[@linux ~]$ ./test_ciphers 192.168.1.11:443 Obtaining cipher list from OpenSSL 0.9.8k 25 Mar 2009. Testing ADH-AES256-SHA...NO (sslv3 alert handshake failure) Testing DHE-RSA-AES256-SHA...NO (sslv3 alert handshake failure) Testing DHE-DSS-AES256-SHA...NO (sslv3 alert handshake failure) Testing AES256-SHA...YES
BEARBEITEN: Flexibilität hinzufügen, da Host und Port als Parameter für das Skript bereitgestellt werden