0

我正在按照教程在 Android 应用程序和我的服务器之间实现 https 连接。

我有一些问题:

  • KeystoregetKeystorePassword不像 meto 那样被识别。
  • createSSLSocketFactory()没有参数,但它的定义类似于createSSLSocketFactory(final Context context)
  • 我不明白类“ public class SecureHttpClient extends DefaultHttpClient ”是否在@override clientConnectionManager之前完成,并且是否必须将在使用安全客户端部分中编写的代码插入到我的mainActivity 中。
4

1 回答 1

0

您必须使用的功能,,

/******************************for https request***********************************************/
    private HttpClient sslClient(HttpClient client) {
        try {
            X509TrustManager tm = new X509TrustManager() { 
                public void checkClientTrusted(X509Certificate[] xcs, String string) throws CertificateException {
                }

                public void checkServerTrusted(X509Certificate[] xcs, String string) throws CertificateException {
                }

                public X509Certificate[] getAcceptedIssuers() {
                    return null;
                }
            };
            SSLContext ctx = SSLContext.getInstance(getString(R.string.tls));
            ctx.init(null, new TrustManager[]{tm}, null);
            SSLSocketFactory ssf = new MySSLSocketFactory(ctx);
            ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
            ClientConnectionManager ccm = client.getConnectionManager();
            SchemeRegistry sr = ccm.getSchemeRegistry();
            sr.register(new Scheme(getString(R.string.https), ssf, 443));
            return new DefaultHttpClient(ccm, client.getParams());
        } catch (Exception ex) {
            return null;
        }
    }
    public class MySSLSocketFactory extends SSLSocketFactory {
        SSLContext sslContext = SSLContext.getInstance(getString(R.string.tls));

        public MySSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
            super(truststore);

            TrustManager tm = new X509TrustManager() {
                public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                }

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

                public X509Certificate[] getAcceptedIssuers() {
                    return null;
                }
            };

            sslContext.init(null, new TrustManager[] { tm }, null);
        }

        public MySSLSocketFactory(SSLContext context) throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException, UnrecoverableKeyException {
            super(null);
            sslContext = context;
        }

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

        @Override
        public Socket createSocket() throws IOException {
            return sslContext.getSocketFactory().createSocket();
        }
    }
    /**********************************end********************************************/

而且你必须像下面描述的那样调用上面提到的函数,,,,

// Execute HTTP Post Request
        HttpClient client = new DefaultHttpClient();




 //The Line you need to use to call above function
        HttpClient sslHttpsClient=sslClient(client);




HttpConnectionParams.setConnectionTimeout(sslHttpsClient.getParams(), 10000); //Timeout Limit
        HttpResponse response;
于 2013-10-14T13:28:45.957 回答