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
Lepaskan: 2024-12-11 17:00:19
asal
444 orang telah melayarinya

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
  }
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan