由于我在项目中使用 HTTPS url 使用 Asyn 任务,因此基于证书和域验证 SSL 证书,但最近收到来自 google play console 的警告。因此,请建议我需要实施哪些更改。
public void SSLValidation(Context ctx) throws Exception {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
InputStream is = ctx.getResources().openRawResource(R.raw.newuatserver); // Place your 'your_cert.crt' file in `res/raw`
Certificate ca;
try (InputStream caInput = new BufferedInputStream(is)) {
ca = cf.generateCertificate(caInput);
}
String keyStoreType = KeyStore.getDefaultType();
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(null, null);
keyStore.setCertificateEntry("ca", ca);
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(keyStore);
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, tmf.getTrustManagers(), null);
HostnameVerifier allHostsValid = new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
String str;
str="*.uatapp.in";
try {
String principalName = ((X509Certificate)session.getPeerCertificates()[0]).getSubjectDN().getName().split(",")[0];
if (principalName.contains("CN="))
{
String paramString = principalName.trim().replaceAll("CN=", "");
return str.contains(paramString);
}
} catch (SSLPeerUnverifiedException e) {
return false;
}
return false;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
}
发现您的应用使用了包含用户安全漏洞的软件。具有这些漏洞的应用程序可能会暴露用户信息或损坏用户的设备,并且可能会被视为违反我们的恶意行为政策。以下是在您最近提交的文件中检测到的问题列表和相应的 APK 版本。
- TrustManager 您可以在这篇 Google 帮助中心文章中找到有关 TrustManager 的更多信息。
- HostnameVerifier 您的应用程序正在使用 HostnameVerifier 接口的不安全实现。您可以在此 Google 中找到有关如何解决此问题的更多信息