如何使用Apache客户端接受过期的ssl证书?



我正在尝试使DefaultHttpClient()工作与过期的SSL证书。

Android API 2.2

无法编译,因为这一行:

SSLSocketFactory (sslContext);

错误:The constructor SSLSocketFactory(SSLContext) is undefined

我做错了什么?

    import javax.net.ssl.SSLContext;
    import javax.net.ssl.TrustManager;
    import javax.net.ssl.X509TrustManager;
    import org.apache.http.conn.ssl.SSLSocketFactory;
    {...}
        SSLContext sslContext = SSLContext.getInstance("SSL");
        // set up a TrustManager that trusts everything
        sslContext.init(null, new TrustManager[] { new X509TrustManager() {
                    public X509Certificate[] getAcceptedIssuers() {
                            System.out.println("getAcceptedIssuers =============");
                            return null;
                    }
                    public void checkClientTrusted(X509Certificate[] certs,
                                    String authType) {
                            System.out.println("checkClientTrusted =============");
                    }
                    public void checkServerTrusted(X509Certificate[] certs,
                                    String authType) {
                            System.out.println("checkServerTrusted =============");
                    }
        } }, new SecureRandom());
        SSLSocketFactory sf = new SSLSocketFactory(sslContext);
        Scheme httpsScheme = new Scheme("https", sf, 443);
        SchemeRegistry schemeRegistry = new SchemeRegistry();
        schemeRegistry.register(httpsScheme);
        HttpParams params = new BasicHttpParams();
        ClientConnectionManager cm = new SingleClientConnManager(params, schemeRegistry);
        //DefaultHttpClient httpclient = new DefaultHttpClient();
        DefaultHttpClient httpclient = new DefaultHttpClient(cm, params);

查看SSLSocketFactory的文档,似乎没有构造函数:

SSLSocketFactory(javax.net.ssl.SSLContext)

可用的构造函数有:

SSLSocketFactory(String algorithm, KeyStore keystore, String keystorePassword, KeyStore truststore, SecureRandom random, HostNameResolver nameResolver)
SSLSocketFactory(KeyStore keystore, String keystorePassword, KeyStore truststore)
SSLSocketFactory(KeyStore keystore, String keystorePassword)
SSLSocketFactory(KeyStore truststore)

我错过了什么吗?

参见javax.net.ssl.SSLContext

您没有做错任何事情(除了可能使用了一些标准的Java代码)。

看来Apache SSLSocketFactory类的Android实现并没有实现原始Apache SSLSocketFactory类的所有构造函数

你只能即兴发挥了

最新更新