根据 Google Play 商店在应用程序中正确的主机名验证器
Posted
技术标签:
【中文标题】根据 Google Play 商店在应用程序中正确的主机名验证器【英文标题】:Proper HostName Verifier in app according to Googe Play Store 【发布时间】:2020-08-21 02:53:17 【问题描述】:到目前为止,我一直在使用以下代码在应用程序中调用“https”API。
public class HttpsTrustManager implements X509TrustManager
private static TrustManager[] trustManagers;
private static final X509Certificate[] _AcceptedIssuers = new X509Certificate[];
@SuppressLint("TrustAllX509TrustManager")
@Override
public void checkClientTrusted(
X509Certificate[] x509Certificates, String s)
throws java.security.cert.CertificateException
@SuppressLint("TrustAllX509TrustManager")
@Override
public void checkServerTrusted(
X509Certificate[] x509Certificates, String s)
throws java.security.cert.CertificateException
public boolean isClientTrusted(X509Certificate[] chain)
return true;
public boolean isServerTrusted(X509Certificate[] chain)
return true;
@Override
public X509Certificate[] getAcceptedIssuers()
return _AcceptedIssuers;
public static void allowAllSSL()
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier()
@Override
public boolean verify(String arg0, SSLSession arg1)
return true;
);
SSLContext context = null;
if (trustManagers == null)
trustManagers = new TrustManager[]new HttpsTrustManager();
try
context = SSLContext.getInstance("TLS");
context.init(null, trustManagers, new SecureRandom());
catch (NoSuchAlgorithmException e)
e.printStackTrace();
catch (KeyManagementException e)
e.printStackTrace();
HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());
我是 google play store 完成的 android 安全更改的新手。我从 Play Store 收到此警告:
在您的自定义 HostnameVerifier 接口中更改验证方法,以便在服务器的主机名不符合您的期望时返回 false。
我想知道我应该在应用程序或服务器中进行哪些更改?我已经尝试过堆栈溢出中存在的其他链接,但我不清楚我应该修改应用程序还是只在服务器中创建签名证书?
我能找到但不确定是否可行的解决方案
如果我添加以下代码:
`HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier()
@Override
public boolean verify(String hostname, SSLSession arg1)
if (hostname.equalsIgnoreCase("https://xxxxxx.xx") )
return true;
else
return false;
);`
那么它在Play商店中不会有任何问题吗?
【问题讨论】:
这能回答你的问题吗? Security Alert From Google For Android APP 不..我没有从这个链接中得到清晰..我已经编辑了我的问题。请检查。我不确定我正在尝试的解决方案。请看看 如果您点击链接,那么是的,提供您的应用程序使用的所有主机名。不要忘记测试和调试应用程序(在verify()
方法中放置一个断点)以确认您的应用程序在将主机名列入白名单后可以正常运行。
我担心的是 Play 商店发出的警报仅仅是因为我没有在 verify() 内的 if else 条件下提供我的域名。如果我按照编辑后的帖子中提到的那样提供这个,那么 Play 商店将不会显示错误还是应该做其他事情,比如添加证书等?
这不是 SSL 的有效或安全实现。您应该删除所有这些代码。您的allowAllSSL
唯一要做的就是完全禁用所有 SSL 安全性。这样做会使您的用户面临基于网络的窃听和攻击。
【参考方案1】:
这不是 SSL 的有效或安全实施,您提出的解决方案也不是。
正确的解决方法是删除所有这些代码。
您的allowAllSSL
方法唯一要做的就是完全禁用所有 SSL 安全性。这样做会使您的用户面临基于网络的窃听和攻击。
【讨论】:
那么如果我不使用此代码,API 调用会给出 SSL 握手异常......那么在哪里检查解决方案?应用端还是服务器端?以上是关于根据 Google Play 商店在应用程序中正确的主机名验证器的主要内容,如果未能解决你的问题,请参考以下文章