Как исправить небезопасную реализацию предупреждения X509TrustManager в приложении для Android

Я получаю предупреждение системы безопасности о загруженной мной сборке Android в магазине Google Play.

«Ваше приложение использует небезопасную реализацию интерфейса X509TrustManager с HTTP-клиентом Apache, что приводит к уязвимости системы безопасности. Подробную информацию, включая крайний срок исправления уязвимости, см. В этой статье Справочного центра Google».

Я пытаюсь исправить это, выполнив следующий код и обновив свою сборку

public class MySSLSocketFactory  extends SSLSocketFactory {
    SSLContext sslContext = SSLContext.getInstance("TLS");

    public MySSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
        super(truststore);

        TrustManager tm = new X509TrustManager() {
            public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            }

            public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            }

            public X509Certificate[] getAcceptedIssuers() {
                return null;
            }
        };

        sslContext.init(null, new TrustManager[] { tm }, null);
    }

    @Override
    public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException {
        return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose);
    }

    @Override
    public Socket createSocket() throws IOException {
        return sslContext.getSocketFactory().createSocket();
    }
}

Но все же я получаю предупреждение о безопасности.

Еще один вопрос, что я не хочу снова и снова обновлять свое живое приложение, чтобы удалить это предупреждение системы безопасности. Могу ли я как-нибудь загрузить свою сборку и проверить, что изменения были внесены безупречно и что я могу работать с этим же приложением?

Обновление: я также добавляю следующие строки в checkServerTrusted ()

try {
    chain[0].checkValidity();
} catch (CertificateExpiredException e) {
    Logger.e(TAG, "CertificateExpiredException");
    throw new CertificateException("CertificateExpiredException");
} catch (CertificateNotYetValidException e) {
    Logger.e(TAG, "CertificateNotYetValidException");
    throw new CertificateException("CertificateNotYetValidException");
}

person ParikshitSinghTomar    schedule 29.02.2016    source источник
comment
Могу ли я загрузить свою сборку и проверить, что изменения были внесены безупречно, и могу ли я работать с этим же приложением. Вы можете опубликовать новую версию как альфа- или бета-версию и добавить только себя в качестве бетатестера .   -  person Michael    schedule 29.02.2016
comment
Я пытаюсь исправить это, реализовав следующий код и обновив свою сборку - это само определение небезопасного X509TrustManager. Удалите, пожалуйста. Но все же я получаю предупреждение системы безопасности - это потому, что вы не устранили проблему, а только усугубили ее. Если вы еще не использовали X509TrustManager в своем коде (до того, что вы делали в этом вопросе), тогда вероятно, проблема связана с библиотекой.   -  person CommonsWare    schedule 29.02.2016
comment
На странице поддержки Google для этой ошибки: Чтобы правильно обрабатывать проверку сертификата SSL, измените свой код в методе checkServerTrusted вашего пользовательского интерфейса X509TrustManager, чтобы вызывать исключение CertificateException или IllegalArgumentException всякий раз, когда сертификат, представленный сервером, не соответствует вашим ожиданиям. Текущая реализация из X509TrustManager будет доверять любому сертификату, с которым он был представлен.   -  person Michael    schedule 29.02.2016
comment
@Michael, я знаю, что могу загрузить свое приложение в режиме Alpha, Beta. Но уверены ли вы, что это предупреждение системы безопасности также будет отображаться в режимах тестирования и в режиме тестирования Google будет выдавать мне предупреждения системы безопасности, если проблема не исчезнет, ​​или подтвердит, что проблема успешно решена.   -  person ParikshitSinghTomar    schedule 29.02.2016
comment
Вы уверены, что это предупреждение системы безопасности также будет отображаться в режимах тестирования? Нет, но это было бы довольно легко проверить. Просто загрузите бета-версию, которая не содержит дополнительных исправлений.   -  person Michael    schedule 29.02.2016
comment
@Michael, теперь еще добавляю несколько строк в методе checkServerTrustet. Смотрите обновления.   -  person ParikshitSinghTomar    schedule 29.02.2016
comment
@CommonsWare, я удаляю поддержку клиента Apache из своего проекта и использую класс HttpsUrlConnection. Я также обновляю свою библиотеку поддержки от бизнес-команды, и прямо сейчас они также используют вышеуказанный класс. Но проблема все еще отображается. Теперь у меня есть еще три библиотеки 1. Facebook SDK 2. Crashlytics 3. libraryImageCaching. Я проверяю код библиотекиImageCaching и этой библиотеки также с помощью HttpUrlConnection и HttpsUrlConnection. Теперь проблема может быть в FB SDK и Crashlytics. Как я могу определить, что проблема связана с этим блоком кода или библиотекой.   -  person ParikshitSinghTomar    schedule 10.05.2016
comment
@PKTomar: обновите эти библиотеки до последних версий. Если проблема не исчезнет, ​​обратитесь в Facebook и Twitter соответственно.   -  person CommonsWare    schedule 10.05.2016
comment
Я тоже сделаю это.   -  person ParikshitSinghTomar    schedule 10.05.2016
comment
@CommonsWare, я обнаружил, что это предупреждение отображается для предыдущей сборки публикации, а не для моих тестовых сборок. Я загружаю еще 2 или 3 сборки в режиме тестирования, чтобы проверить эту проблему, но Google проверяет только сборку публикации. Есть способ загрузить сборку, которая не будет опубликована, но я могу проверить эту проблему.   -  person ParikshitSinghTomar    schedule 12.05.2016
comment
@PKTomar: Понятия не имею, извините.   -  person CommonsWare    schedule 12.05.2016


Ответы (1)


Если вы хотите проверить, что ваше приложение было исправлено, вы можете загрузить его как запланированную публикацию.

Если ваша новая версия не устранила упомянутую ошибку, вы получите уведомление.

person user3673952    schedule 29.02.2016
comment
Я не могу найти вариант для отложенной публикации. Но теперь я публикую это приложение в Google Group, возможно, это поможет. - person ParikshitSinghTomar; 12.05.2016