Makluman Jabat Tangan SSL: Isu Nama Tidak Dikenali selepas Menaik taraf ke Java 1.7.0
Setelah menaik taraf daripada Java 1.6 hingga 1.7, pengguna mungkin menghadapi masalah Amaran SSLHandshake dengan mesej ralat "unrecognized_name" semasa membuat SSL sambungan ke pelayan web. Ralat ini disebabkan terutamanya oleh pengenalan Java 7 bagi sokongan Petunjuk Nama Pelayan (SNI), yang didayakan secara lalai.
Untuk menyelesaikan isu ini, terdapat beberapa pilihan yang tersedia:
Untuk melumpuhkan SNI secara global, baris arahan berikut hujah boleh digunakan semasa menjalankan aplikasi:
-Djsse.enableSNIExtension=false
Sebagai alternatif, sifat boleh ditetapkan secara pemrograman sebelum sebarang tindakan SSL dilakukan:
System.setProperty("jsse.enableSNIExtension", "false");
Walau bagaimanapun, melumpuhkan SNI mungkin mempunyai implikasi untuk aplikasi yang memerlukan fungsinya.
Pendekatan lain melibatkan pengendalian makluman "unrecognized_name" dengan lebih anggun. Langkah-langkah berikut boleh diambil:
// Create an SSLSocket with the desired hostname SSLSocket sslsock = ... // Attempt handshake try { // This will block until the attempt succeeds or fails. sslsock.startHandshake(); } catch (SSLException e) { // Handle the exception here. If it contains the "unrecognized_name" message, disable SNI and retry. } // Disable SNI and retry handshake without hostname if (e.getMessage().contains("unrecognized_name")) { sslsock = ... // Create an SSLSocket without specifying a hostname sslsock.startHandshake(); }
Kod yang diberikan cuba menyambung ke pelayan yang tidak dipercayai sijil. Untuk mengurangkan perkara ini, pertimbangkan untuk melaksanakan pengurusan amanah tersuai atau menggunakan pengurus amanah terbina dalam:
// Custom trust management (for untrusted certificates) TrustManager[] trustAllCerts = ... // Built-in trust manager TrustManager[] trustManagers = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()).getTrustManagers();
Atas ialah kandungan terperinci Mengapa Saya Mendapat Makluman Jabat Tangan SSL 'unrecognized_name' Selepas Menaik taraf kepada Java 1.7?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!