【问题标题】:Using HTTPS with AsyncHttpClient(Library)将 HTTPS 与 AsyncHttpClient(库)一起使用
【发布时间】:2015-04-01 04:56:04
【问题描述】:

我想在不绕过 SSL 证书验证的情况下向 HTTPS 服务器请求,

AsyncHttpClient client = new AsyncHttpClient(true, 80, 443); 

我想要一种使用密钥库文件来验证 SSL 的方法。请帮忙。

【问题讨论】:

    标签: android rest https android-asynctask


    【解决方案1】:

    第 1 步:首先下载 Keystore Explorer Download Link 并创建一个类型为 BKS-V1 的新 Keystore 文件并导入您的公钥证书 到密钥库。

    第 2 步:将 Keystore 文件复制到项目的 res/raw 中。

    第 3 步:使用此函数获取 SSLSocketFactory

    private SSLSocketFactory getSocketFactory() {
            // TODO Auto-generated method stub
            SSLSocketFactory sslFactory = null;
            try {
                KeyStore keyStore = KeyStore.getInstance("BKS");
                InputStream instream = this.getResources().openRawResource(
                        R.raw.website_public);
                keyStore.load(instream, "keystore_password".toCharArray());
                sslFactory = new MySSLSocketFactory(keyStore);
            } catch (KeyStoreException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (NoSuchAlgorithmException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (CertificateException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (UnrecoverableKeyException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (KeyManagementException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return sslFactory;
        }
    

    第 4 步:在 AsyncHttpClient 对象中设置 SocketFactory。

            AsyncHttpClient mAsyncHttpClient = new AsyncHttpClient();
            mAsyncHttpClient.addHeader(HTTP.CONTENT_TYPE,
                    "application/x-www-form-urlencoded;charset=UTF-8");
            mAsyncHttpClient.setSSLSocketFactory(getSocketFactory());
    

    【讨论】:

    • 我已按照您的解决方案使用 asynchttpclientlibrary 发出 https 请求。在 android 应用程序中存储密钥库密码的最佳方法是什么?在 Android 上存储是否安全?是否可以解密?
    【解决方案2】:

    我想你可以参考这个library。库中的 AsyncHttpClient 可用于在你的 Android 应用程序中进行异步 GET、POST、PUT 和 DELETE HTTP 请求。还可以提供 SSlSocketFactory 来指定 SSL 相关参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-22
      • 1970-01-01
      • 1970-01-01
      • 2017-08-05
      • 1970-01-01
      • 1970-01-01
      • 2017-12-07
      • 2023-03-19
      相关资源
      最近更新 更多