Android HTTPS请求

时间:2011-10-06 04:48:29

标签: android ssl https

我尝试了很多选择,我会发疯的。每当我尝试发布到URL时,我都会继续获得SSL异常。

这就像使用HttpWebRequest在C#中做梦一样。

我得到的错误是:

Not trusted server certificate
java.security.cert.CertPathValidatorException: TrustAnchor for CertPath not found.

我现在正在尝试以下方法,但我尝试过自定义SocketFactories,一切。请帮忙!

    final String httpsURL = "https://...";
    final DefaultHttpClient client = new DefaultHttpClient();
    final HttpPost httppost = new HttpPost(httpsURL);

    //authentication block:
    final List<BasicNameValuePair> nvps = new ArrayList<BasicNameValuePair>();
    nvps.add(new BasicNameValuePair("mail", username));
    nvps.add(new BasicNameValuePair("password", password));
    UrlEncodedFormEntity p_entity = null;
    try {
        p_entity = new UrlEncodedFormEntity(nvps, HTTP.UTF_8);
    } catch (UnsupportedEncodingException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    httppost.setEntity(p_entity);

    //sending the request and retrieving the response:
    HttpResponse response = null;
    try {
        response = client.execute(httppost, _context);
    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    HttpEntity responseEntity = response.getEntity();

    //handling the response: responseEntity.getContent() is your InputStream
    try {
        final InputSource inputSource = new InputSource(responseEntity.getContent());
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

1 个答案:

答案 0 :(得分:1)

您需要考虑Android如何确定证书的有效性。当需要验证证书时,它将查看签名链。如果它可以在其顶部找到受信任的权限,并且证书不在撤销列表中,那么它将被信任。

为了减少耗时的查询,Android捆绑了一个它信任的常见CA列表。正如您在评论中指出的那样,升级时错误消失了。这很可能是由于您使用的CA被添加到已发布的可信CA列表中。

如果您信任该证书,则可以将其添加到此受信任CA列表中。 accepted answerthis question有关旧版本此过程的一些详细信息!较新版本更有可能随附您需要的证书。对于较新的版本,您可以直接从SD卡安装证书。转到Settings -> Security。在Credential storage下,您会找到选项Install from device storage。只要您使用标准格式,您就应该能够安装证书!

我的来源:Security with HTTPS and SSL | Android Developers