Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:如何创建具有自签名证书和SSL缓存的HttpClient_Java_Android_Caching_Ssl_Httpclient - Fatal编程技术网

Java Android:如何创建具有自签名证书和SSL缓存的HttpClient

Java Android:如何创建具有自签名证书和SSL缓存的HttpClient,java,android,caching,ssl,httpclient,Java,Android,Caching,Ssl,Httpclient,我很难实现与Android的SSL连接。我的程序在特定的时间间隔内发送数据。要关闭发送的数据卷,我想使用SSL缓存。 有人知道如何在Android中创建一个带有自签名证书和SSL缓存的HttpClient吗 我想使用HttpClient类,我的解决方案如下所示(以CastException结尾): 这是将新构建方案注册到SchemeRegistry时的CastException W/System.err(343): java.lang.ClassCastException: org.apach

我很难实现与Android的SSL连接。我的程序在特定的时间间隔内发送数据。要关闭发送的数据卷,我想使用SSL缓存。 有人知道如何在Android中创建一个带有自签名证书和SSL缓存的HttpClient吗

我想使用HttpClient类,我的解决方案如下所示(以CastException结尾):

这是将新构建方案注册到SchemeRegistry时的CastException

 W/System.err(343): java.lang.ClassCastException: org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl cannot be cast to org.apache.http.conn.scheme.SocketFactory
}

}


您在哪里使用自签名证书或ssl缓存?我使用的是自签名证书,这导致了此异常,因为根据ssl规则和策略,自生成的证书不是受信任的证书。我仍然看不到ssl缓存的用法。因此,谢谢,但是我需要一个SSL缓存,并且可以使用自签名证书。我希望减少每个新连接建立的有效负载-我希望重用上一个服务器连接的SSL会话。此TrustManager非常不安全,不应在生产中部署。您在哪里使用自签名证书或SSL缓存?我使用自签名证书,它导致了此异常根据SSL规则和策略,自生成的证书不是受信任的证书。我仍然看不到SSL缓存的用法。因此,谢谢,但我需要SSL缓存以及使用自签名证书的可能性。我希望减少每个新连接建立的有效负载-我希望重用最后一个服务器连接的SSL会话。此TrustManager非常不安全,不应在生产中部署。
 W/System.err(343): java.lang.ClassCastException: org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl cannot be cast to org.apache.http.conn.scheme.SocketFactory
    public class SimpleSSLSocketFactory extends
    org.apache.http.conn.ssl.SSLSocketFactory {
private javax.net.ssl.SSLSocketFactory sslFactory = HttpsURLConnection
        .getDefaultSSLSocketFactory();

public SimpleSSLSocketFactory(KeyStore truststore)
        throws NoSuchAlgorithmException, KeyManagementException,
        KeyStoreException, UnrecoverableKeyException {
    super(null);
    try {
        SSLContext context = SSLContext.getInstance("TLS");
        TrustManager[] trustAllCerts = new TrustManager[] { new  

                 X509TrustManager() {
            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                return new java.security.cert.X509Certificate[] {};
            }
            public void checkClientTrusted(X509Certificate[] chain,
                    String authType) throws CertificateException {
            }

            public void checkServerTrusted(X509Certificate[] chain,
                    String authType) throws CertificateException {
            }
        } };

        // Initialize the socket factory
        context.init(null, trustAllCerts, new SecureRandom());
        sslFactory = context.getSocketFactory();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

@Override
public Socket createSocket(Socket socket, String host, int port,
        boolean autoClose) throws IOException, UnknownHostException {
    return sslFactory.createSocket(socket, host, port, autoClose);
}

@Override
public Socket createSocket() throws IOException {
    return sslFactory.createSocket();
}
   U can call like this 


                  try {
        SSLSocketFactory sslFactory = new SimpleSSLSocketFactory(null);
        sslFactory
                .setHostnameVerifier(SSLSocketFactory.
                    ALLOW_ALL_HOSTNAME_VERIFIER);
        HttpParams params = new BasicHttpParams();
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
        SchemeRegistry registry = new SchemeRegistry();
        registry.register(new Scheme("http", PlainSocketFactory
                .getSocketFactory(), 80));
        registry.register(new Scheme("https", sslFactory, 443));
        ClientConnectionManager ccm = new ThreadSafeClientConnManager(
                params, registry);
        DefaultHttpClient httpClient = new DefaultHttpClient(ccm, params);
        HttpPost httpPost = new HttpPost(url);
        HttpHost proxy = new HttpHost("50.104.5.277", 23333);

        //httpPost.setHeader("Content-Type", "text/xml");
        httpPost.setEntity(entity);
        httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,
                proxy);
        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        output = EntityUtils.toString(httpEntity);

        // Toast.makeText(getApplicationContext(), xml, 1000).show();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (KeyManagementException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (UnrecoverableKeyException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (KeyStoreException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return output;
}