Rumah  >  Artikel  >  Java  >  Bagaimana untuk Mengendalikan Sijil SSL Tidak Sah dalam Apache HttpClient Tanpa KeyManager dan TrustManager?

Bagaimana untuk Mengendalikan Sijil SSL Tidak Sah dalam Apache HttpClient Tanpa KeyManager dan TrustManager?

DDD
DDDasal
2024-11-04 19:58:02144semak imbas

How to Handle Invalid SSL Certificates in Apache HttpClient Without KeyManager and TrustManager?

Mengendalikan Sijil SSL Tidak Sah dengan Apache HttpClient

Soalan:

Apabila menggunakan Apache HttpClient untuk mewujudkan sambungan HTTPS, ralat yang berkaitan dengan sijil SSL tidak sah ditemui. Bagaimanakah saya boleh mengatasi ralat ini sambil mengelakkan penggunaan KeyManager dan TrustManager?

Jawapan:

Mengendalikan sijil SSL yang tidak sah dalam Apache HttpClient memerlukan salah satu daripada pendekatan berikut:

  • Mengkonfigurasi SSLContext dengan TrustManager yang menerima sebarang sijil
  • Mengkonfigurasi SSLContext dengan kedai amanah yang sesuai yang mengandungi sijil yang diperlukan
  • Menambah sijil pada kedai amanah Java lalai

Melaksanakan TrustManager untuk Sebarang Sijil:

Kod berikut menunjukkan cara membuat SSLContext dengan TrustManager yang menerima sebarang sijil:

<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://mms.nw.ru");
        HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
        conn.setHostnameVerifier(new HostnameVerifier() {
            @Override
            public boolean verify(String arg0, SSLSession arg1) {
                return true;
            }
        });
        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>

Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Sijil SSL Tidak Sah dalam Apache HttpClient Tanpa KeyManager dan TrustManager?. 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