【问题标题】:DefaultHttpClient get ssl exception on HTTP requestDefaultHttpClient 在 HTTP 请求上获取 ssl 异常
【发布时间】:2013-01-11 09:27:56
【问题描述】:

我们的安卓应用程序引用HTTP URL 从服务器获取一些数据。直到 2 天前它工作正常,但突然我们得到"sslpeerunverifiedexception: no peer certificate" exception,而我们的代码和服务器都没有发生任何变化。代码很简单:

HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 12000);
HttpConnectionParams.setSoTimeout(httpParameters, 12000);
HttpClient client = new DefaultHttpClient(httpParameters);
HttpGet request = new HttpGet("http://site.com");
HttpResponse httpResponse = client.execute(request);

【问题讨论】:

  • 请提供 logcat 详细信息。
  • 1) URL 是 http 还是 https? 2) 本地主机还是直播网址?
  • 我猜您的网址已更改为 https,为此您需要添加对等证书并设置主机名验证器等!
  • Androis 在 Galaxy Note II 上是 4.1.1。该 URL 是实时的,并且只有 HTTP。通过浏览器检查 URL 是否像以前一样工作

标签: android ssl httprequest


【解决方案1】:

在您的代码中添加以下函数。

public HttpClient getNewHttpClient() throws SocketException, UnknownHostException {
    try {
        KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
        trustStore.load(null, null);

        SSLSocketFactory sf = new MySSLSocketFactory(trustStore);
        sf.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", sf, 443));

        ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);
        return new DefaultHttpClient(ccm, params);
    } catch (Exception e) {
        return new DefaultHttpClient();
    }
}

并使用下面的代码调用上面的函数。

HttpClient httpclient = getNewHttpClient();

【讨论】:

  • 我尝试了与此类似的代码,以忽略 SSL 异常,但在“SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER”上出现 eclipse 错误无法解析或不是字段
  • @kazemipouya 哪个是您的目标 sdk 和 min sdk?
  • 最小和目标顺序为 14、16。
  • @kazemipouya 将您的最小目标 sdk 更改为 8,然后构建项目,然后检查。
  • 我使用 Holo 作为主题,我需要的最小目标是 13,顺便说一下通过更换 wifi 路由器解决的问题,我仍然不知道为什么,但它可以工作。
【解决方案2】:

听起来您正在访问的服务器正在使用自签名 SSL 证书。

虽然不推荐(可能是 MiM 攻击),但您可以忽略这一点。有关更多信息,请参阅此帖子:Self-signed SSL acceptance on Android

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多