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:
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>
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!