Rumah >Java >javaTutorial >Bagaimanakah cara saya membetulkan ralat 'java.security.cert.CertificateException: Tiada nama alternatif subjek' semasa mengakses perkhidmatan web melalui HTTPS?

Bagaimanakah cara saya membetulkan ralat 'java.security.cert.CertificateException: Tiada nama alternatif subjek' semasa mengakses perkhidmatan web melalui HTTPS?

Linda Hamilton
Linda Hamiltonasal
2024-11-08 02:31:02341semak imbas

How do I fix the

Membetulkan "java.security.cert.CertificateException: Tiada nama alternatif subjek hadir" Ralat

Apabila mengakses perkhidmatan web melalui HTTPS menggunakan pelanggan Java, menghadapi ralat "java.security.cert.CertificateException: Tiada nama alternatif subjek hadir" menunjukkan ketidakpadanan antara nama subjek sijil dan alamat hos.

Untuk menyelesaikan isu ini, ikut langkah berikut:

  1. Ekstrak maklumat sijil antara "-----BEGIN CERTIFICATE-----" dan "-----END CERTIFICATE-----" daripada output "openssl s_client -showcerts -connect AAA.BBB.CCC.DDD:9443 -gt; certs.txt".
  2. Ubah suai sijil yang diekstrak supaya medan "Subject's Common Name (CN)" sepadan dengan alamat IP (AAA. BBB.CCC.DDD). Ini boleh dicapai menggunakan alatan seperti arahan "x509" OpenSSL.
  3. Import sijil yang diubah suai menggunakan "keytool -importcert -file fileWithModifiedCertificate".

Walau bagaimanapun, kaedah ini mungkin tidak selalunya boleh dilaksanakan jika anda tidak mempunyai kawalan ke atas sijil pelayan.

Penyelesaian alternatif ialah melumpuhkan semakan HTTPS. Pendekatan ini melibatkan penciptaan pengurus amanah tersuai dan pengesah nama hos yang membenarkan semua sijil diterima. Dalam kelas "ISomeService", tambahkan kod berikut:

static {
    disableSslVerification();
}

private static void disableSslVerification() {
    // Create a trust manager that does not validate certificate chains
    TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return null;
        }
        public void checkClientTrusted(X509Certificate[] certs, String authType) {
        }
        public void checkServerTrusted(X509Certificate[] certs, String authType) {
        }
    }
    };

    // Install the all-trusting trust manager
    SSLContext sc = SSLContext.getInstance("SSL");
    sc.init(null, trustAllCerts, new java.security.SecureRandom());
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

    // Create all-trusting host name verifier
    HostnameVerifier allHostsValid = new HostnameVerifier() {
        public boolean verify(String hostname, SSLSession session) {
            return true;
        }
    };

    // Install the all-trusting host verifier
    HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
}

Perhatikan bahawa melumpuhkan semakan HTTPS tidak disyorkan untuk persekitaran pengeluaran kerana kebimbangan keselamatan.

Atas ialah kandungan terperinci Bagaimanakah cara saya membetulkan ralat 'java.security.cert.CertificateException: Tiada nama alternatif subjek' semasa mengakses perkhidmatan web melalui HTTPS?. 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