Rumah  >  Artikel  >  Java  >  Bagaimana untuk Mengendalikan Sijil SSL Tidak Sah dengan Apache HttpClient?

Bagaimana untuk Mengendalikan Sijil SSL Tidak Sah dengan Apache HttpClient?

Linda Hamilton
Linda Hamiltonasal
2024-11-06 08:34:02932semak imbas

How to Handle Invalid SSL Certificates with Apache HttpClient?

Mengendalikan Sijil SSL Tidak Sah dengan Apache HttpClient

Apabila mewujudkan sambungan HTTP selamat melalui SSL menggunakan Apache HttpClient, anda mungkin menghadapi ralat yang menunjukkan tidak sah Sijil SSL. Ralat ini berlaku apabila pelayan jauh membentangkan sijil yang tidak dipercayai oleh set pengurus amanah Java.

Penyelesaian Kemungkinan:

Untuk menyelesaikan isu ini, terdapat beberapa pendekatan anda boleh mengambil:

  1. Konfigurasikan SSLContext dengan TrustManager yang Menerima:
    Buat TrustManager tersuai yang menerima sebarang sijil, tanpa mengira kesahihannya. Pendekatan ini tidak disyorkan untuk persekitaran pengeluaran, kerana ia menjejaskan keselamatan sambungan SSL.

    <code class="java">// Configure SSLContext with a TrustManager that accepts any certificate
    SSLContext ctx = SSLContext.getInstance("TLS");
    ctx.init(null, new TrustManager[] {new DefaultTrustManager()}, new SecureRandom());
    SSLContext.setDefault(ctx);</code>
  2. Konfigurasikan SSLContext dengan Kedai Amanah yang Betul:
    Dapatkan yang dipercayai sijil daripada pelayan jauh dan mengimportnya ke kedai amanah. Kemudian, konfigurasikan SSLContext untuk menggunakan kedai amanah ini.
  3. Tambah Sijil pada Gedung Amanah Lalai:
    Import sijil untuk pelayan jauh ke dalam gedung amanah Java lalai, sama ada secara manual atau melalui alat seperti alat kunci.

Contoh Kod:

Sampel kod berikut menunjukkan cara mencipta SSLContext yang menerima sebarang sijil, seperti yang dicadangkan dalam penyelesaian pertama :

<code class="java">import java.net.URL;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

public class SSLTest {
    
    public static void main(String [] args) throws Exception {
        // configure the SSLContext with a TrustManager
        SSLContext ctx = SSLContext.getInstance("TLS");
        ctx.init(new KeyManager[0], new TrustManager[] {new DefaultTrustManager()}, new SecureRandom());
        SSLContext.setDefault(ctx);

        URL url = new URL("https://remote-server-address");
        HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
        conn.setHostnameVerifier(HostnameVerifier.ALL); // temporarily disable strict hostname verification
        System.out.println(conn.getResponseCode());
        conn.disconnect();
    }
    
    private static class DefaultTrustManager implements X509TrustManager {

        @Override
        public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}

        @Override
        public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}

        @Override
        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }
    }
}</code>

Nota: Ingat bahawa menggunakan TrustManager yang menerima seperti ini hanya perlu dipertimbangkan untuk tujuan ujian dan penyahpepijatan dan tidak boleh digunakan dalam persekitaran pengeluaran.

Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Sijil SSL Tidak Sah dengan Apache HttpClient?. 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