首页 > 解决方案 > 通过 SSLSocketFactory 连接时接受使用 Java 的自签名证书

问题描述

这里有一些关于如何使用 Java 接受自签名 SSL 连接的答案。但是当通过 SSLSocketFactory 连接到服务器时,这些都不起作用。谁能给我示例代码?

标签: java

解决方案


像下面这样创建一个类。此 Java 代码将使您能够接受所有证书

        public static class NukeSSLCerts {
protected static final String TAG = "NukeSSLCerts";

public static void nuke() {
    try {
        TrustManager[] trustAllCerts = new TrustManager[] { 
            new X509TrustManager() {
                public X509Certificate[] getAcceptedIssuers() {
                    X509Certificate[] myTrustedAnchors = new X509Certificate[0];  
                    return myTrustedAnchors;
                }

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

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

        SSLContext sc = SSLContext.getInstance("SSL");
        sc.init(null, trustAllCerts, new SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
        HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
            @Override
            public boolean verify(String arg0, SSLSession arg1) {
                return true;
            }
        });
    } catch (Exception e) { 
    }
}

}

并像这样执行

    new NukeSSLCerts().nuke();

推荐阅读