【问题标题】:unsafe implementation of the HostnameVerifier interfaceHostnameVerifier 接口的不安全实现
【发布时间】:2017-11-02 06:54:15
【问题描述】:

我开发了应用并发布了 google play 商店,然后收到了来自 Google 的通知

主机名验证器 您的应用正在使用 HostnameVerifier 接口的不安全实现。您可以在这篇 Google 帮助中心文章中找到有关如何解决问题的更多信息,包括修复漏洞的截止日期。

我不能使用 HostnameVerifier 或调用 setDefaultHostnameVerifier(),我认为它依赖于一些 3rd 方库。使用了第三方库-Google map, baidu map, firebase crash analytics, firebase phone authentication, quick blox, mob authentication

我尝试在 splash 中使用这些代码来解决这个问题-

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 商店拒绝了。

请帮我找出这段代码有什么问题?以及如何解决?

【问题讨论】:

    标签: android hostname android-security


    【解决方案1】:

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

    【讨论】:

    • 对不起,但没有得到要删除的内容以及如何使用默认的@Gabe Sechan
    • 只需删除所有这些代码。如果未指定,则使用默认验证器。它将接受信誉良好的签名机构的任何证书
    • 我们之前尝试过。早些时候没有代码,但谷歌仍然拒绝了该应用
    • 遇到同样的问题,有什么帮助吗?
    • @Alex Cohn 是的,它是 BrineTree 支付网关
    【解决方案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连接,如果这是他们的预期。防止中间攻击。

    【讨论】:

      猜你喜欢
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-27
      • 1970-01-01
      相关资源
      最近更新 更多