ユーザ用ツール

サイト用ツール


Sidebar

プロトコル系:ssl関連:cipherを決定するサーバとクライアントの処理

クライアント側から使い体Ciphersuiteのリストを送信する必要があるので、クライアント側のSSL実装も変更する必要がある。 あるいは、クライアント側では特に弄らず多くのsuiteを送っておいて、サーバ側で任意のCipherを選択してやるだけでよさそう。 こっちの方が複数のクライアントに修正を適応しなくてよいので楽。

しかし、JAVAのサーバ側のCiphersuite選択は以下のような実装になっているようだ。

refs: http://www.scutum.jp/information/waf_tech_blog/2011/10/waf-blog-009.html

サーバ側でのBEAST対策として、CipherSuiteにRC4のようなストリーム暗号を使用するものを選ぶという方法があります。しかし残念なことに、TomcatのようなJavaで書かれたサーバアプリケーションでは、クライアント側から送られるCipherSuiteの一覧が先頭から順番に評価され、サーバ側で有効にしているものが見つかった時点で、そのCipherSuiteが選択されます。そのため、サーバ側がAESとRC4のどちらも有効になっており、かつクライアント側がRC4よりもAESを使いたがっている場合には、必ずAESが選択されてしまいます。

サーバ側では、SSLSocketクラスのsetEnabledCipherSuitesメソッドを使うことにより、CipherSuiteの有効・無効については制御することができます。そのため、AESのようなブロック暗号を使用するCipherSuiteをすべて無効にしてしまうという方法も技術的には可能ですが、この場合実質的にRC4のみをサポートするSSLサーバとなってしまうでしょう(現実的にはRC4をサポートしないクライアントというのはあまりいないかと思われますので、それでも問題ないと考えることもできるかもしれません)。

ということは、この場合はやはりクライアント側で限定する必要がありそうだ。

ちなみに、cipher毎のパフォーマンスに関しては下記サイトが非常に良い。

http://wizardbible.org/45/45.txt

プロトコル系/ssl関連/cipherを決定するサーバとクライアントの処理.txt · 最終更新: 2013/05/10 23:02 by matsumoto_r