はじめに
HTTPS が動いている Web サーバーで SSL の cipher suite って何をサポートしているのかしら、そもそもそれってどうやって調べるんや?と思っていたら cipherscan というツールに出会ったので試してみました。
そもそも
openssl コマンドで…
openssl のライブラリとリンクしている Web サーバー(おそらくほとんど)であれば以下のように確認出来そうです。
openssl ciphers -v
と言っても cipherscan を使ってみましょう
cipherscan とは?
Cipherscan tests the ordering of the SSL/TLS ciphers on a given target, for all major versions of SSL and TLS. It also extracts some certificates informations. Cipherscan uses the openssl s_client command line to run the tests.
とありますので openssl s_client を内部的に利用して SSL/TLS の cipher suite をテストするツールです。
README には google.com にアクセスしている例が示されておりますが今回はローカルホストに構築した Web サーバーで試します。
試した環境
- Amazon Linux(Amazon Linux AMI release 2014.03)
download
github から取ってくるだけです。
cd /opt
git clone https://github.com/jvehent/cipherscan.git
Apache と mod_ssl
Amazon Linux 上にて Apache と mod_ssl をインストールしてしまいます。
yum install httpd mod_ssl
インストール後に Apache を起動すると 443 ポートも上がります。ヤバイ程に簡単ですな。
# netstat -an | grep 443
tcp 0 0 :::443 :::* LISTEN
Apache のバージョンは以下の通りでした。
Server version: Apache/2.2.27 (Unix)
Server built: Apr 25 2014 22:26:04
Server's Module Magic Number: 20051115:33
Server loaded: APR 1.5.0, APR-Util 1.4.1
Compiled using: APR 1.5.0, APR-Util 1.4.1
Architecture: 64-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/etc/httpd"
-D SUEXEC_BIN="/usr/sbin/suexec"
-D DEFAULT_PIDLOG="run/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="logs/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"
初めての cipherscan
以下のようにして cipherscan を実行してみます。
./cipherscan 127.0.0.1:443
以下のように出力されました。
......................................
prio ciphersuite protocols pubkey_size signature_algorithm trusted pfs_keysize
1 ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 1024 sha256WithRSAEncryption False ECDH,P-256,256bits
2 ECDHE-RSA-AES256-SHA384 TLSv1.2 1024 sha256WithRSAEncryption False ECDH,P-256,256bits
3 ECDHE-RSA-AES256-SHA SSLv3,TLSv1,TLSv1.1,TLSv1.2 1024 sha256WithRSAEncryption False ECDH,P-256,256bits
4 DHE-RSA-AES256-GCM-SHA384 TLSv1.2 1024 sha256WithRSAEncryption False DH,1024bits
5 DHE-RSA-AES256-SHA256 TLSv1.2 1024 sha256WithRSAEncryption False DH,1024bits
6 DHE-RSA-AES256-SHA SSLv3,TLSv1,TLSv1.1,TLSv1.2 1024 sha256WithRSAEncryption False DH,1024bits
7 DHE-RSA-CAMELLIA256-SHA SSLv3,TLSv1,TLSv1.1,TLSv1.2 1024 sha256WithRSAEncryption False DH,1024bits
8 AECDH-AES256-SHA SSLv3,TLSv1,TLSv1.1,TLSv1.2 0 None True ECDH,P-256,256bits
9 AES256-GCM-SHA384 TLSv1.2 1024 sha256WithRSAEncryption False
10 AES256-SHA256 TLSv1.2 1024 sha256WithRSAEncryption False
11 AES256-SHA SSLv3,TLSv1,TLSv1.1,TLSv1.2 1024 sha256WithRSAEncryption False
12 CAMELLIA256-SHA SSLv3,TLSv1,TLSv1.1,TLSv1.2 1024 sha256WithRSAEncryption False
13 ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 1024 sha256WithRSAEncryption False ECDH,P-256,256bits
14 ECDHE-RSA-AES128-SHA256 TLSv1.2 1024 sha256WithRSAEncryption False ECDH,P-256,256bits
15 ECDHE-RSA-AES128-SHA SSLv3,TLSv1,TLSv1.1,TLSv1.2 1024 sha256WithRSAEncryption False ECDH,P-256,256bits
16 DHE-RSA-AES128-GCM-SHA256 TLSv1.2 1024 sha256WithRSAEncryption False DH,1024bits
17 DHE-RSA-AES128-SHA256 TLSv1.2 1024 sha256WithRSAEncryption False DH,1024bits
18 DHE-RSA-AES128-SHA SSLv3,TLSv1,TLSv1.1,TLSv1.2 1024 sha256WithRSAEncryption False DH,1024bits
19 DHE-RSA-SEED-SHA SSLv3,TLSv1,TLSv1.1,TLSv1.2 1024 sha256WithRSAEncryption False DH,1024bits
20 DHE-RSA-CAMELLIA128-SHA SSLv3,TLSv1,TLSv1.1,TLSv1.2 1024 sha256WithRSAEncryption False DH,1024bits
21 AECDH-AES128-SHA SSLv3,TLSv1,TLSv1.1,TLSv1.2 0 None True ECDH,P-256,256bits
22 AES128-GCM-SHA256 TLSv1.2 1024 sha256WithRSAEncryption False
23 AES128-SHA256 TLSv1.2 1024 sha256WithRSAEncryption False
24 AES128-SHA SSLv3,TLSv1,TLSv1.1,TLSv1.2 1024 sha256WithRSAEncryption False
25 SEED-SHA SSLv3,TLSv1,TLSv1.1,TLSv1.2 1024 sha256WithRSAEncryption False
26 CAMELLIA128-SHA SSLv3,TLSv1,TLSv1.1,TLSv1.2 1024 sha256WithRSAEncryption False
27 IDEA-CBC-SHA SSLv3,TLSv1,TLSv1.1,TLSv1.2 1024 sha256WithRSAEncryption False
28 ECDHE-RSA-RC4-SHA SSLv3,TLSv1,TLSv1.1,TLSv1.2 1024 sha256WithRSAEncryption False ECDH,P-256,256bits
29 AECDH-RC4-SHA SSLv3,TLSv1,TLSv1.1,TLSv1.2 0 None True ECDH,P-256,256bits
30 RC4-SHA SSLv3,TLSv1,TLSv1.1,TLSv1.2 1024 sha256WithRSAEncryption False
31 RC4-MD5 SSLv3,TLSv1,TLSv1.1,TLSv1.2 1024 sha256WithRSAEncryption False
32 ECDHE-RSA-DES-CBC3-SHA SSLv3,TLSv1,TLSv1.1,TLSv1.2 1024 sha256WithRSAEncryption False ECDH,P-256,256bits
33 EDH-RSA-DES-CBC3-SHA SSLv3,TLSv1,TLSv1.1,TLSv1.2 1024 sha256WithRSAEncryption False DH,1024bits
34 AECDH-DES-CBC3-SHA SSLv3,TLSv1,TLSv1.1,TLSv1.2 0 None True ECDH,P-256,256bits
35 DES-CBC3-SHA SSLv3,TLSv1,TLSv1.1,TLSv1.2 1024 sha256WithRSAEncryption False
36 EDH-RSA-DES-CBC-SHA SSLv3,TLSv1,TLSv1.1,TLSv1.2 1024 sha256WithRSAEncryption False DH,1024bits
37 DES-CBC-SHA SSLv3,TLSv1,TLSv1.1,TLSv1.2 1024 sha256WithRSAEncryption False
オプションに -j を渡すと JSON で出力してくれるようです。
./cipherscan -j 127.0.0.1:443 | jq .
jq 等を絡めると以下のように美しくw表示されます。
さいごに
- これで色々と捗りそうです
- 自分が管理していないサイトへの cipherscan でのアクセスは必要以上に行わないようにしましょう(なんとなく)
元記事は、こちら