Rumah >Java >javaTutorial >Bagaimana untuk Memintas Sijil Pelayan Tidak Dipercayai Apabila Mewujudkan Sambungan HTTPS pada Android?

Bagaimana untuk Memintas Sijil Pelayan Tidak Dipercayai Apabila Mewujudkan Sambungan HTTPS pada Android?

DDD
DDDasal
2024-12-10 16:25:12908semak imbas

How to Bypass Untrusted Server Certificates When Establishing HTTPS Connections on Android?

Penubuhan Sambungan HTTPS pada Android

Apabila cuba mewujudkan sambungan HTTPS pada Android, pembangun mungkin menghadapi pengecualian yang berkaitan dengan sijil pelayan yang tidak dipercayai . Untuk menangani perkara ini, seseorang boleh mempertimbangkan untuk menerima sijil pelayan.

Percayai Semua Hos

Satu pendekatan untuk memintas pengesahan sijil ialah mempercayai semua hos, melumpuhkan pemeriksaan dengan berkesan. Ini boleh dicapai dengan melaksanakan HostnameVerifier tersuai dan TrustManager.

// Hostname verifier that always returns true
HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {
    @Override
    public boolean verify(String hostname, SSLSession session) {
        return true;
    }
};

// Trust manager that accepts all certificates
TrustManager[] trustAllCerts = new TrustManager[]{
    new X509TrustManager() {
        @Override
        public X509Certificate[] getAcceptedIssuers() {
            return new X509Certificate[]{};
        }

        @Override
        public void checkClientTrusted(X509Certificate[] chain, String authType) {}

        @Override
        public void checkServerTrusted(X509Certificate[] chain, String authType) {}
    }
};

Seterusnya, mulakan SSLContext dan gunakan pengurus amanah dan pengesah nama hos.

SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

Contoh Penggunaan

Apabila membuat sambungan HTTP, semak protokol dan gunakan konfigurasi yang dinyatakan di atas jika ia HTTPS.

HttpURLConnection http = null;
String url = "https://example.com";

if (url.toLowerCase().equals("https")) {
    trustAllHosts();
    HttpsURLConnection https = (HttpsURLConnection) url.openConnection();
    https.setHostnameVerifier(DO_NOT_VERIFY);
    http = https;
} else {
    http = (HttpURLConnection) url.openConnection();
}

Atas ialah kandungan terperinci Bagaimana untuk Memintas Sijil Pelayan Tidak Dipercayai Apabila Mewujudkan Sambungan HTTPS pada Android?. 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