Надлежащий верификатор HostName в приложении согласно Googe Play Store - PullRequest
0 голосов
/ 06 мая 2020

Я до сих пор использую следующий код для вызова API «https» в приложении.

 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());
}

}

Я новичок в android изменениях безопасности, внесенных в Google Play Store. Я получаю это предупреждение из Play Магазин:

измените метод проверки в пользовательском интерфейсе HostnameVerifier, чтобы он возвращал false, когда имя хоста сервера не соответствует вашим ожиданиям.

Я хочу знать, что какие изменения я должен сделать в приложении или на сервере ?? Я пробовал другие ссылки, присутствующие в стеке Overflow, но я не понимаю, что мне нужно изменить приложение или просто создать подписанный сертификат на сервере?

Решение, которое я могу найти, но не уверен, что оно сработает или нет

Если я добавлю следующий код:

 `HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
        @Override
        public boolean verify(String hostname, SSLSession arg1) {
            if (hostname.equalsIgnoreCase("https://xxxxxx.xx") ){

                return true;
            } else {
                return false;
            }
        }});`

, не возникнет ли проблем в магазине игр?

1 Ответ

1 голос
/ 06 мая 2020

Это недействительная или безопасная реализация SSL, а также ваше предлагаемое решение.

Правильное решение - удалить весь этот код.

Единственное, что ваше allowAllSSL метод полностью отключает всю безопасность SSL. Делая это, вы открываете своим пользователям возможности для сетевого перехвата и атак.

...