Rumah >Java >javaTutorial >Mengapakah Java 1.7.0 Menghasilkan Makluman Jabat Tangan SSL 'unrecognized_name', dan Bagaimana Ia Boleh Diselesaikan?

Mengapakah Java 1.7.0 Menghasilkan Makluman Jabat Tangan SSL 'unrecognized_name', dan Bagaimana Ia Boleh Diselesaikan?

Linda Hamilton
Linda Hamiltonasal
2024-12-11 17:00:19467semak imbas

Why Does Java 1.7.0 Produce an

SSL Handshake Alert: Unrecognized_Name Error Muncul Semula dengan Java 1.7.0 Naik Taraf

Susulan peningkatan daripada Java 1.6 hingga 1.7, pengguna mungkin menghadapi masalah Makluman jabat tangan SSL dicirikan oleh mesej ralat "unrecognized_name." Isu ini timbul khususnya apabila mewujudkan sambungan SSL ke pelayan web.

Ralat berpunca daripada pengenalan sokongan SNI (Petunjuk Nama Pelayan) dalam Java 7, yang didayakan secara lalai. Pelayan tersalah konfigurasi tertentu bertindak balas dengan amaran "Nama Tidak Dikenali" semasa jabat tangan, yang diabaikan oleh kebanyakan pelanggan tetapi bukan Java.

Pilihan Penyelesaian:

Jurutera Oracle telah menolak untuk menangani isu ini. Walau bagaimanapun, dua penyelesaian utama tersedia:

Lumpuhkan SNI:

  • Jalankan aplikasi dengan arahan: java -Djsse.enableSNIExtension=false yourClass
  • Tetapkan harta secara pemrograman: System.setProperty("jsse.enableSNIExtension", "false");

Perhatikan bahawa melumpuhkan SNI menjejaskan keseluruhan aplikasi.

Kendalikan Pelayan Tersalah Konfigurasi:

Untuk pendekatan yang lebih disasarkan, gunakan yang berikut langkah:

  1. Buat SSLSocket dengan nama hos.
  2. Cuba untuk memulakan jabat tangan.
  3. Semak ralat "unrecognized_name".
  4. Jika ralat berlaku, cuba semula buka SSLSocket tanpa nama hos (lumpuhkan dengan berkesan SNI).

Contoh Kod:

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
  }
}

Kesimpulan:

Dengan melaksanakan penyelesaian yang diterangkan, pengguna boleh mengurangkan ralat "unrecognized_name" apabila menggunakan Java 1.7.0 dan berinteraksi dengan salah konfigurasi pelayan sambil mengekalkan keupayaan SNI untuk sambungan lain.

Atas ialah kandungan terperinci Mengapakah Java 1.7.0 Menghasilkan Makluman Jabat Tangan SSL 'unrecognized_name', dan Bagaimana Ia Boleh Diselesaikan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn