Я знаю, что это повторяющийся вопрос, но позвольте мне объяснить мою ситуацию ...
Недавно я запросил подтверждение в приложении Google Play Console, но оно отклонено по следующей причине:
Your app(s) are using an unsafe implementation of the HostnameVerifier interface
После поиска различных сообщений SO я исправил свою реализацию следующим кодом:
public static HttpsURLConnection setUpHttpsConnection(String urlString, Context ct)
{
try
{
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(final String hostname, final SSLSession session) {
if (hostname.equalsIgnoreCase("12.15.56.23") || hostname.equalsIgnoreCase("api.mypayment.com") || hostname.equalsIgnoreCase("api.sandbox.mypayment.com") || hostname.equalsIgnoreCase("api.otherprovider.com"))
return true;
else
return false;
}
});
SSLContext c = SSLContext.getInstance("TLS");
c.init(null, new X509TrustManager[]{new NullX509TrustManager()}, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(c.getSocketFactory());
// Load CAs from an InputStream
CertificateFactory cf = CertificateFactory.getInstance("X.509");
InputStream caInput = new BufferedInputStream(ct.getAssets().open("myapp.pem"));
Certificate ca = cf.generateCertificate(caInput);
....
Я думал, что эта реализация была правильной, но это все еще отклонено ... пожалуйста, обратите внимание, что яиспользование самозаверяющего сертификата (myapp.pem) для всех запросов POST и GET, выполняемых моим приложением.
Я не могу понять, почему это отклоняется?