[自2017年3月1日开始,Google Play将禁止发布使用不安全实施HostnameVerifier的任何新应用或更新。您发布的APK版本将保持不变,但是除非您解决此漏洞,否则该应用程序的任何更新都将被阻止。
需要采取的措施
为了正确处理主机名验证,请在服务器的主机名不符合您的期望时,在自定义HostnameVerifier界面中更改verify方法,以返回false。
这是我从Google Play商店收到的有关我的一个应用的消息。
如何解决此问题?
分支并切换到OkHttp。漫漫长夜,您的脑袋。
如消息中所述,在verify()
类内的HostnameVerifier
方法上,仅返回true
作为您的应用程序信任的主机名。
尝试一下。在建立连接之前调用此方法。
@SuppressLint("TrulyRandom")
public static void handleSSLHandshake() {
try {
TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
@Override
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
@Override
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
}};
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String arg0, SSLSession arg1) {
if(arg0.equalsIgnoreCase("google.com") || arg0.equalsIgnoreCase("firebasedynamiclinks.googleapis.com")||
arg0.equalsIgnoreCase("youtube.com")){
return true;
}else {
return false;
}
}
});
} catch (Exception ignored) {
}
}