2012-02-20 2 views
2

こんにちは、私は単純なJava HTTPサーバNanoHTTPDをしようとしています:http://elonen.iki.fi/code/nanohttpd/JavaのSSL:クローム/ Firefoxのではなく、 "GET/HTTP/1.1" のHTTPヘッダの "G" を送信

今日、私はHTTPSでそれをサポートしようので、私はそのNanoHTTPDコンストラクタでSSLServerSocketを作成します。

// myServerSocket = new ServerSocket(myTcpPort); 
myServerSocket = SSLServerSocketFactory.getDefault().createServerSocket(myTcpPort); 

とも結果はHTTPS接続がMSIE6.0、MSIE8.0は、Firefox 9.0.1に成功していることである2048ビットのRSAキー

javax.net.ssl.keyStoreを供給 は、しかし、Google Chromeの17.0.963.56 mとFirefoxの10.0.1に失敗:

デバッグから、NanoHTTPD.HTTPSession.decodeHeader方法だけString inLine = "G"かろうじて1つの文字を取得し、通常はここであなたは、標準のHTTPヘッダを期待する一方、「GET/HTTP/1.1を」。

だから、Firefoxでおなじみの誰もがHTTPS/SSLに関する9.0.1と10.0.1の異なる何言うことができますか?ブラウザによって作られた何かがポイントかもしれません。 (もちろん、私はSSLServerSocketで間違っているかどうか教えてください。)

私はクロスこの問題を掲載している: https://support.mozilla.org/en-US/questions/920116

はあなたのすべてをありがとうございました。

答えて

4

あなたのSSL実装が壊れていることが不足しています。 SSLレコードは任意の方法で分割することができ、GoogleとMozillaはSSLに対するMITM攻撃を回避するためにそれらを分割する方法を変更しました。具体的には、1バイトのSSLレコードが残りのデータとともに2番目のSSLレコードを送信する前に送信されます。 SSL実装では、すべてのデータを読み取るのではなく、最初のレコードのみを読み取るように思えます。

私はJavaからSSLEngineのを確認することができhttp://rt.openssl.org/Ticket/Display.html?id=2635&user=guest&pass=guesthttps://bugzilla.mozilla.org/show_bug.cgi?id=665814http://www.livehacking.com/2011/10/27/chrome-15-broke-the-wall-street-journal-while-trying-to-beat-the-beast/

1

のような記事を参照してくださいは、デフォルトでは壊れて表示されます。私が周りを回る方法は次のとおりです。

^Cpck0:bin vladimirralev$ /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --disable-ssl-false-start --use-spdy=off --use-system-ssl 

これは奇妙なTLSモードをオフにします。

あなたはそれがセグメント化されたパケットを読むためにあなたを与えるの指示に従って維持した場合、最近のSSLEngineのは正しく動作しますように見えます。複数の読み込みを繰り返す必要があります(その間にいくつかの断続的な状態があります)、最終的に完全なチャンクが得られます。

+0

すべてのユーザーがブラウザの設定を変更してセキュリティを低下させる可能性がある場合は、ただし、デバッグに役立つヒントです。 –

関連する問題