おまえの SSL はしょっぱい暗号で通信していないか?

Web で情報を送るときはもうすっかり SSL が必須でしょうという時代ですね。パケットキャプチャ勢にはたいへん辛い時代となって参りました。本物のサーバですかの確認、そしてその通信経路の保護ということで SSL が使われるわけです。

SSL と一言に申してもその中の公開鍵暗号のキーのビット数であったり、秘密鍵暗号の方式であったり、ハッシュキーの生成アルゴリズムであったり、といういくつかの組み合わせがあるわけです。たとえばこんな感じで、TLS 1.0 で接続、暗号化はRC4、ハッシュはSHA1、鍵交換はECDHE_RSAだよというのがわかります。

ブラウザさんとWEBサーバさんとの間で話し合い、それぞれが持つ暗号などのアルゴリズムから一番強いモノを選んで通信するようです。よいことです。それはよいことなのですが。

悪い人は、既に弱くなってしまった暗号で通信できやしないかと試すわけです。WEBサーバが弱い暗号に返事をしてしまったら、そこから何か悪さができやしないかと試すわけです。さて、自分とこの WEB サーバは弱い暗号、今やすっかり解読されてしまう暗号方式で通信できるようになってないよね?と気になるわけです。試してみましょう。

どうすれば暗号形式を明示しながら通信できるの?それ openssl でできます。たとえば、RSA 鍵長 512bit 暗号化 RC4 の 40bit というショッパいヤツで通信してみましょう。

 

# openssl s_client -connect server.example.com:443 -cipher EXP-RC4-MD5
CONNECTED(00000003)
3078252268:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:s23_clnt.c:674:

 

ガッツリ切られました。当然です。こんな感じで、弱い要求が通ってしまわないよね?ってコトが確認できます。ショボい暗号で通信を要求されちまった場合は、WEB サーバ側で弱いのを使わないように設定を変えましょう。