HostnameVerifier接口的不安全实现

时间:2017-11-02 06:54:15

标签: android hostname android-security

我开发了该应用并发布了Google Play商店,然后收到了Google的通知 free software

的HostnameVerifier 您的应用正在使用HostnameVerifier接口的不安全实现。您可以在此Google帮助中心文章中找到有关如何解决问题的详细信息,包括修复漏洞的截止日期。

我无法使用HostnameVerifier或调用setDefaultHostnameVerifier(),我认为它依赖于某些第三方库。第三方lib使用 - Google map, baidu map, firebase crash analytics, firebase phone authentication, quick blox, mob authentication

我尝试在启动时使用这些代码来解决此问题 -

HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;

        DefaultHttpClient client = new DefaultHttpClient();

        SchemeRegistry registry = new SchemeRegistry();
        SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory();
        socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);
        registry.register(new Scheme("https", socketFactory, 443));
        SingleClientConnManager mgr = new SingleClientConnManager(client.getParams(), registry);
        DefaultHttpClient httpClient = new DefaultHttpClient(mgr, client.getParams());
        HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);

并且

HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
            public boolean verify(final String hostname, final SSLSession session) {



                if (session.isValid()) {

                    return true;
                }
                else
                {
                    return false;
                }`

但是,我的应用程序被Google Play商店拒绝了。

请帮助我找到这段代码的错误?以及如何解决它?

2 个答案:

答案 0 :(得分:2)

HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
            @Override
            public boolean verify(String hostname, SSLSession session) {
                // could judge
                if (hostname.equals("xx.xx.xx.xx")) {
                    return true;
                } else {`enter code here`
                    return false;
                }
            }
});

根据谷歌的提示,解决方案是确定主机代号为HTTPS连接,如果这是他们的期望的话。防止中间攻击。

答案 1 :(得分:1)

只需删除所有内容并使用默认值即可。您不需要指定特定的一个。如果由于某种原因您实际上没有证书并需要接受未签名的证书 - 只需购买证书。这些天花费10美元。 Google不会接受任何盲目接受证书的应用。