Firefox 39からDH鍵の鍵長が1024bit未満のchiper-suiteをサポートしているサイトを表示しようとすると下記のエラーが出るようになりました。
安全な接続ができませんでした xxx.xxx.xxx.xxx への接続中にエラーが発生しました。SSL received a weak ephemeral Diffie-Hellman key in Server Key Exchange handshake message. (エラーコード: ssl_error_weak_server_ephemeral_dh_key)
詳しくはこちら
とはいえ、いくつもサイトを管理していると一個一個ブラウザで確認するのはしんどいので、簡易的なチェックを行うスクリプトを作ってみました。
detect.sh
#!/bin/sh COLOR_RED="\e[31;1m" COLOR_GREEN="\e[32;1m" COLOR_OFF="\e[m" TEXT_OK=" ... [ ${COLOR_GREEN}OK${COLOR_OFF} ]" TEXT_NG=" ... [ ${COLOR_RED}NG${COLOR_OFF} ]" PORTS=(443 993 995 465 1194 8443) while read f; do line=$f for (( I = 0; I < ${#PORTS[@]}; ++I )) do port=${PORTS[$I]} EDH=`echo "" | timeout 3 openssl s_client -connect ${line}:${port} -cipher "EDH" 2> /dev/null | grep "Server Temp Key" | awk -F'DH, ' '{print $2}' | awk -F' ' '{print $1}'` ECDHE=`echo "" | timeout 3 openssl s_client -connect ${line}:${port} -cipher "ECDHE" 2> /dev/null | grep "Server Temp Key" | awk -F', ' '{print $2}' | awk -F' ' '{print $1}'` EXPORT=`echo "" | timeout 3 openssl s_client -connect ${line}:${port} -cipher "EXP" 2> /dev/null | grep "Verify return code" | wc -l` echo -n ${line}:${port} ... EDH bits [${EDH}], ECDHE bits [${ECDHE}], EXPORT [${EXPORT}] if [ -n "${EDH}" ] && [ ${EDH} -lt 1024 ] ; then echo -n -e ${TEXT_NG} elif [ -n "${ECDHE}" ] && [ ${ECDHE} -lt 1024 ] ; then echo -n -e ${TEXT_NG} elif [ -n "${EXPORT}" ] && [ ${EXPORT} -gt 0 ] ; then echo -n -e ${TEXT_NG} else echo -n -e ${TEXT_OK} fi echo "" done done
使い方
echo "127.0.0.1" | sh detect.sh # もしくはホスト名を改行区切りで羅列したlistというファイルを作成して cat list | sh detect.sh