どうも、小ネタ野郎の かっぱ@inokara)です。


はじめに

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表示されます。

01


さいごに

  • これで色々と捗りそうです
  • 自分が管理していないサイトへの cipherscan でのアクセスは必要以上に行わないようにしましょう(なんとなく)

元記事は、こちら