2012-04-17 7 views
3

キャッシュされたセッションを再開する可能性のある重複ながら:私のJ2SEアプリは安全な場所にアクセスするためのHttpsURLConnectionを使用しています
SSL handshake alert: unrecognized_name error since upgrade to Java 1.7.0SSLException

。私は自分のJREを1.7にアップデートするまでうまく動作していました。今私は、SSLException "ハンドシェイク中にリモートホストクローズ接続"を取得します。 JRE 1.6とJRE 1.7の両方で、-Djavax.net.debug = ssl:handshakeを使用してアプリケーションを実行したところ、1.7より下ではキャッシュされたクライアントセッションが再開できなくなってしまいました。

UPDATE : JRE 1.6では、クライアントアプリケーションがSSLv2Helloカプセル化を使用していることがわかりました。しかし、JRE 1.7の下ではそのようなことはありません.JRE 1.7は、おそらく例外を引き起こす原因です。私の質問はこれです:JRE 1.7で動作するクライアントのSSLv2Helloカプセル化を有効にするにはどうすればよいですか?

更新#2: でSSLv2HelloをするSystem.setProperty( "https.protocols"、 "TLSv1の、でSSLv2Hello")を介してJRE 7に達成。しかし、これによってハンドシェイクの例外はなくなりませんでした。例外の真の理由は暗号スイートだということが分かります。 JRE 6では、サーバーはSSL_RSA_WITH_RC4_128_MD5をクライアントのオプションから選択しますが、JRE 7では常にTLS_DHE_RSA_WITH_AES_128_CBC_SHAを使用します。なんらかの理由で、サーバーはTLS_DHE_RSA_WITH_AES_128_CBC_SHAを使用してキャッシュされたセッションを再開できません。 System.setProperty( "https.cipherSuites"、suggestedCipherSuites)を使用して問題を修正しました。ただし、suggestedCipherSuitesは常にSSL_RSA_WITH_RC4_128_MD5で始まります。このアプローチには何らかの弱点がありますか?

UPDATE#3: クライアントのSNI拡張は、サーバーを悩ませるものです。 http://docs.oracle.com/javase/7/docs/technotes/guides/security/enhancements7.html

答えて

3

最終的に、問題はJSSEクライアント1.7のSNI拡張に関連していたことが判明しました。「JSSEクライアントのSNI(Server Name Indication)」を参照してください。

System.setProperty ("jsse.enableSNIExtension", "false"); 

彼の解決のためにeckesに感謝を(SSL handshake alert: unrecognized_name error since upgrade to Java 1.7.0を参照してください): ソリューションは、HTTPSの場所へのアクセスの前に、SNIレコードの送信を無効にすることです。

関連する問題