ホームページ >Java >&#&チュートリアル >Java 1.7.0 が「unrecognized_name」SSL ハンドシェイク アラートを生成する理由と、それを解決するにはどうすればよいですか?

Java 1.7.0 が「unrecognized_name」SSL ハンドシェイク アラートを生成する理由と、それを解決するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-11 17:00:19389ブラウズ

Why Does Java 1.7.0 Produce an

SSL ハンドシェイク アラート: Java 1.7.0 アップグレードで再発生する Unrecognized_Name エラー

Java 1.6 から 1.7 へのアップグレード後、ユーザーは次のエラーに遭遇する可能性があります。エラー メッセージを特徴とする SSL ハンドシェイク アラート「認識されない名前。」この問題は、特に Web サーバーへの SSL 接続を確立するときに発生します。

このエラーは、デフォルトで有効になっている Java 7 での SNI (Server Name Indication) サポートの導入に起因します。一部の構成が間違っているサーバーは、ハンドシェイク中に「認識されない名前」警告で応答しますが、これは Java ではなくほとんどのクライアントによって無視されます。

回避策オプション:

Oracle エンジニアは拒否しました。この問題に対処するために。ただし、次の 2 つの主要な回避策が利用可能です。

SNI を無効にする:

  • 次のコマンドを使用してアプリケーションを実行します: java -Djsse.enableSNIExtension=false yourClass
  • プログラムでプロパティを設定します。 System.setProperty("jsse.enableSNIExtension", "false");

SNI を無効にするとアプリケーション全体に影響することに注意してください。

誤って設定されたサーバーの処理:

より的を絞ったアプローチの場合は、次の方法を採用します。手順:

  1. ホスト名で SSLSocket を作成します。
  2. ハンドシェイクの開始を試みます。
  3. 「unrecognized_name」エラーがないか確認します。
  4. エラーが発生した場合は、ホスト名を指定せずに SSLSocket を開いて再試行します (実質的に無効になります) SNI).

コード例:

SSLSocketFactory factory = (SSLSocketFactory) SSLContext.getDefault().getSocketFactory();
SSLSocket sslsock = (SSLSocket) factory.createSocket(host, 443);
try {
  sslsock.startHandshake();
} catch (SSLException e) {
  if (e.getMessage().equals("handshake alert:  unrecognized_name")) {
    sslsock = (SSLSocket) factory.createSocket(host, 443);
    sslsock.startHandshake();
  } else {
    // Handle other errors
  }
}

結論:

記載されている回避策を実装すると、ユーザーは、Java 1.7.0 を使用して対話する際の「unrecognized_name」エラーを軽減できます。他の接続の SNI 機能を維持しながら、サーバーの構成が間違っている場合。

以上がJava 1.7.0 が「unrecognized_name」SSL ハンドシェイク アラートを生成する理由と、それを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。