我开发了该应用并发布了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商店拒绝了。
请帮助我找到这段代码的错误?以及如何解决它?
答案 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不会接受任何盲目接受证书的应用。