Android - Ваши приложения используют небезопасную реализацию интерфейса HostnameVerifier - PullRequest
0 голосов
/ 29 сентября 2019

Я знаю, что это повторяющийся вопрос, но позвольте мне объяснить мою ситуацию ...

Недавно я запросил подтверждение в приложении 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, выполняемых моим приложением.

Я не могу понять, почему это отклоняется?

...