【问题标题】:Android <= 4.4.2 and TLS 1.2Android <= 4.4.2 和 TLS 1.2
【发布时间】:2015-12-09 06:58:00
【问题描述】:

我为一家公司做了一个应用程序,它支持 API 级别 13+ (3.0+)。它通过 XML 从他们的 CMS 收集数据并将其显示在应用程序上。这是通过 HTTPS 完成的,在他们将服务器升级到 TLS 1.2 之前它运行良好。现在 API 级别 20 以下的 android 版本将无法获取 XML,因为 SSLPeerUnverifiedException 并且很多手机再也看不到这个应用程序了。

有没有办法在启用 TLS 1.2 的同时通过 SSLPeerUnverified

注意:目前的SSL证书如下:

AddTrust External CA Root
--> COMODO High-Assurance Secure Server CA
  --> *.appdomain.com

迄今为止最有帮助的 SOF 文章: Implementing TLS 1.2 on Android 2.3.3

【问题讨论】:

  • 不确定,但 --> TLSv1.2 受 api 16+ 支持 -- developer.android.com/reference/javax/net/ssl/SSLSocket.html -- 所以应该有解决这个问题的方法 -- 实际上它在服务器套接字上默认启用对于 api 16+ 但不在客户端上
  • @Tasos 你是对的。我目前正在使用HttpClient 并尝试将它的SocketFactory 设置为默认启用 TLS 1.2 的自定义类。它还没有起作用,但它是一个开始。

标签: android ssl tls1.2


【解决方案1】:

团队中的其他人回答了这个问题,但结果包括以下内容:

  • SSLContext helper=null;
  • helper.init(null,null,null);
  • SSLContext.getInstance("TLSv1.2");
  • SSLEngine engine = helper.createSSLEngine();

这是他用来检查 ssl 并将所有内容放入的函数:

public void sslCheck() {

        int PLAY_SERVICES_RESOLUTION_REQUEST=9000;
        int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
        //Log.i("log_tag2", String.valueOf(resultCode));
        if (resultCode != ConnectionResult.SUCCESS) {
            if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
                Log.i("log_tag2","Not good!");
                if (MyAppActivity.instance != null) {
                    Log.i("log_tag2","but can fix");
                    GooglePlayServicesUtil.getErrorDialog(
                            resultCode,
                            MyAppActivity.instance,
                            PLAY_SERVICES_RESOLUTION_REQUEST).show();
                }
            }
        }
        else {
            Log.i("log_tag2","Already good!");
            try {
                ProviderInstaller.installIfNeeded(this);
                Log.i("log_tag", "1");
            } catch (GooglePlayServicesRepairableException e) {
                e.printStackTrace();
            } catch (GooglePlayServicesNotAvailableException e) {
                e.printStackTrace();
            }
            SSLContext helper=null;
            try {
                helper = SSLContext.getInstance("TLSv1.2");
                Log.i("log_tag","2");
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
            try {
                helper.init(null,null,null);
                Log.i("log_tag", "3");
            } catch (KeyManagementException e) {
                e.printStackTrace();
            }
            SSLEngine engine = helper.createSSLEngine();
        }
    }

【讨论】:

  • engine 会发生什么?
  • 好的。谢谢我想通了。确保您的 Google Play 服务在设备上是最新的。使用 Jackson 提供的方法并返回 SSLContext 帮助程序,并在您使用 HttpsUrlConnection 时正常使用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
  • 2023-04-07
  • 2016-02-11
  • 2017-08-08
相关资源
最近更新 更多