Rumah >Java >javaTutorial >Bagaimana untuk Membetulkan Ralat 'java.security.cert.CertificateException: Tiada Nama Alternatif Subjek Hadir' dalam Java?

Bagaimana untuk Membetulkan Ralat 'java.security.cert.CertificateException: Tiada Nama Alternatif Subjek Hadir' dalam Java?

DDD
DDDasal
2024-11-08 02:18:02983semak imbas

How to Fix the

Menyelesaikan masalah "java.security.cert.CertificateException: Tiada Nama Alternatif Subjek Hadir" dalam Java

Apabila menyambung ke perkhidmatan web HTTPS menggunakan klien Java, menghadapi pengecualian "java.security.cert.CertificateException: Tiada nama alternatif subjek hadir" boleh mengecewakan. Begini cara untuk menangani isu ini:

Mengesahkan Maklumat Sijil

Untuk mendapatkan butiran sijil pelayan, gunakan arahan "openssl s_client -showcerts -connect AAA.BBB.CCC .DDD:9443 > Fail "certs.txt" yang terhasil mengandungi:

  • Rantaian Sijil: Kenal pasti sijil yang mengandungi "CN=AAA.BBB.CCC.DDD."
  • Sijil Pelayan: Ekstrak bahagian antara "-----MULAKAN SIJIL-----" dan "-----TAMAT SIJIL-----" untuk sijil ini.

Penyelesaian Alternatif

Mengenai Langkah 1 Penyelesaian Cadangan:

  • Mengekstrak sijil sahaja adalah tidak betul; ia memerlukan pengubahsuaian tambahan.
  • Matlamatnya adalah untuk mencipta sijil yang sepadan dengan alamat IP (AAA.BBB.CCC.DDD).

Mengenai Langkah 2 daripada Cadangan Penyelesaian:

  • Mengubah suai sijil untuk memasukkan AAA.BBB.CCC.DDD memerlukan alat dan kepakaran khusus, menjadikan langkah ini tidak praktikal.

Pendekatan Disyorkan

Pertimbangkan alternatif berikut:

  • Lumpuhkan Pemeriksaan HTTPS:
// In the ISomeService class:
static {
    disableSslVerification();
}

private static void disableSslVerification() {
    // ... [Code to disable HTTPS checks as described in the provided answer]
}
  • Laksanakan Pengesah Nama Hos Tersuai:
// In the ISomeService class:
HostnameVerifier customVerifier = new HostnameVerifier() {
    @Override
    public boolean verify(String hostname, SSLSession session) {
        // Perform custom hostname verification, such as accepting the IP address (AAA.BBB.CCC.DDD).
        return true;
    }
};

HttpsURLConnection httpsConn = (HttpsURLConnection) url.openConnection();
httpsConn.setHostnameVerifier(customVerifier);

Awas: Melumpuhkan semakan HTTPS atau melaksanakan pengesah nama hos tersuai boleh menjejaskan keselamatan. Gunakan pendekatan ini hanya untuk ujian atau dalam persekitaran terkawal.

Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Ralat 'java.security.cert.CertificateException: Tiada Nama Alternatif Subjek Hadir' dalam Java?. 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