我尝试了很多选择,我会发疯的。每当我尝试发布到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();
}
答案 0 :(得分:1)
您需要考虑Android如何确定证书的有效性。当需要验证证书时,它将查看签名链。如果它可以在其顶部找到受信任的权限,并且证书不在撤销列表中,那么它将被信任。
为了减少耗时的查询,Android捆绑了一个它信任的常见CA列表。正如您在评论中指出的那样,升级时错误消失了。这很可能是由于您使用的CA被添加到已发布的可信CA列表中。
如果您信任该证书,则可以将其添加到此受信任CA列表中。 accepted answer到this question有关旧版本此过程的一些详细信息!较新版本更有可能随附您需要的证书。对于较新的版本,您可以直接从SD卡安装证书。转到Settings -> Security
。在Credential storage
下,您会找到选项Install from device storage
。只要您使用标准格式,您就应该能够安装证书!