Rumah > Java > javaTutorial > teks badan

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

DDD
Lepaskan: 2024-11-04 19:58:02
asal
159 orang telah melayarinya

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan