2

こんにちは私は単純なJavahttpサーバーNanoHTTPDを試しています:http://elonen.iki.fi/code/nanohttpd/

今日はHTTPSでサポートしようとしているので、コンストラクターで次のように作成SSLServerSocketします。NanoHTTPD

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

javax.net.ssl.keyStore2048ビットのRSAキーも付属しています

その結果、https接続はMSIE6.0、MSIE8.0、Firefox 9.0.1で成功しますが、Google Chrome17.0.963.56mおよびFirefox10.0.1では失敗します。

デバッグから、NanoHTTPD.HTTPSession.decodeHeaderメソッドはString inLine = "G"1文字しか取得しませんが、通常、ここでは標準のhttpヘッダー" GET / HTTP/1.1"が必要です。

では、Firefoxに精通している人なら誰でも、https /sslに関して9.0.1と10.0.1で何が違うのかを知ることができますか?ブラウザによって作られたものがポイントかもしれません。(もちろん、私はjava sslプログラミングの初心者です。SSLServerSocketが間違っているかどうか教えてください)。

私はこの問題をクロスポストしました: https ://support.mozilla.org/en-US/questions/920116

皆さん、ありがとうございました。

4

2 に答える 2

4

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

http://rt.openssl.org/Ticket/Display.html?id=2635&user=guest&pass=guestおよびhttps://bugzilla.mozilla.org/show_bug.cgi?id=665814およびhttp://wwwなどの記事を参照してください。 .livehacking.com / 2011/10/27 / chrome-15-broke-the-wall-street-journal-while-trying-to-beat-the-beast /

于 2012-02-20T14:00:12.700 に答える
1

JavaからのSSLEngineがデフォルトで壊れているように見えることを確認できます。私がそれを回避する方法は次のとおりです。

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

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

セグメント化されたパケットを読み取るための指示に従い続けると、最近のSSLEngineは正しく動作するようです。複数の読み取りをループする必要があり(間にいくつかの断続的な状態があります)、最終的には完全なチャンクになります。

于 2012-09-25T06:42:36.610 に答える