Android 代码中没有实现时HostnameVerifier接口的不安全实现

Android 代码中没有实现时HostnameVerifier接口的不安全实现,android,android-security,android-securityexception,Android,Android Security,Android Securityexception,我上传了一个新版本到游戏商店,我的版本被拒绝了。拒绝的原因是HostnameVerifier漏洞。我检查了所有代码,但找不到HostnameVerifier或setDefaultHostnameVerifier或setHostnameVerifier的任何用法。 我使用的是X509TrustManager,但再次没有使用X509HostnameVerifier。下面是相同的实现。 在这方面我是否缺少什么或可以获得更多帮助?提前谢谢 if (Build.VERSION.SDK_INT >=

我上传了一个新版本到游戏商店,我的版本被拒绝了。拒绝的原因是HostnameVerifier漏洞。我检查了所有代码,但找不到HostnameVerifier或setDefaultHostnameVerifier或setHostnameVerifier的任何用法。
我使用的是X509TrustManager,但再次没有使用X509HostnameVerifier。下面是相同的实现。
在这方面我是否缺少什么或可以获得更多帮助?提前谢谢

if (Build.VERSION.SDK_INT >= 16 && Build.VERSION.SDK_INT < 22)
        {
            try
            {
                SSLContext sslContext = SSLContext.getInstance("TLSv1.2");

                TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(
                        TrustManagerFactory.getDefaultAlgorithm());
                trustManagerFactory.init((KeyStore) null);
                TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
                if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
                    throw new IllegalStateException("Unexpected default trust managers:"
                            + Arrays.toString(trustManagers));
                }
                X509TrustManager trustManager = (X509TrustManager) trustManagers[0];

                sslContext.init(null, new TrustManager[] { trustManager }, null);

                client.sslSocketFactory(new Tls12SocketFactory(sslContext.getSocketFactory()), trustManager);

                ConnectionSpec cs = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
                        .tlsVersions(TlsVersion.TLS_1_2)
                        .build();

                List<ConnectionSpec> specs = new ArrayList<>();
                specs.add(cs);
                specs.add(ConnectionSpec.COMPATIBLE_TLS);
                if (supportClearText)
                {
                    specs.add(ConnectionSpec.CLEARTEXT);
                }

                client.connectionSpecs(specs);
            } catch (Exception exc)
            {
                Timber.e(exc, "Error while setting TLS 1.2");
            }
        }
if(Build.VERSION.SDK\u INT>=16&&Build.VERSION.SDK\u INT<22)
{
尝试
{
SSLContext SSLContext=SSLContext.getInstance(“TLSv1.2”);
TrustManagerFactory TrustManagerFactory=TrustManagerFactory.getInstance(
TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init((密钥库)null);
TrustManager[]TrustManager=trustManagerFactory.GetTrustManager();
if(trustManagers.length!=1 | |!(trustManagers[0]X509TrustManager实例)){
抛出新的IllegalStateException(“意外的默认信任管理器:”
+toString(trustManagers));
}
X509TrustManager trustManager=(X509TrustManager)trustManager[0];
init(null,新信任管理器[]{TrustManager},null);
client.sslSocketFactory(新的Tls12SocketFactory(sslContext.getSocketFactory()),trustManager);
ConnectionSpec cs=新的ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
.TlsVersion(TlsVersion.TLS_1_2)
.build();
列表规格=新的ArrayList();
增加规格(cs);
规格添加(连接规格兼容);
如果(支持明文)
{
规范添加(连接规范明文);
}
客户连接规范(规范);
}捕获(异常exc)
{
Timber.e(exc,“设置TLS 1.2时出错”);
}
}

为什么需要这些代码?你能把它全部删除,只留下像OkHttp这样的库来做正确的事情吗?升级到OkHttp 3.12.13(旧版Android版本)或4.9.1(更现代的Android版本)。感谢回复@YuriSchimke,但我的代码有多个模块作为项目,它们紧密耦合,因此如果我升级OkHttp版本,就会引起问题。但是我们现在已经开始升级代码。最可能的原因是您的代码依赖于某个库。我尝试清理旧库并升级大多数库,但仍然存在问题。为什么需要这些代码?你能把它全部删除,只留下像OkHttp这样的库来做正确的事情吗?升级到OkHttp 3.12.13(旧版Android版本)或4.9.1(更现代的Android版本)。感谢回复@YuriSchimke,但我的代码有多个模块作为项目,它们紧密耦合,因此如果我升级OkHttp版本,就会引起问题。但我们现在已经开始升级代码。最有可能的原因是您的代码依赖于某个库。我尝试清理旧库并升级大多数库,但仍然存在问题。