2016-02-29 2 views
0

Я получаю предупреждение о безопасности на загружаемом Android-устройстве в Google Play Store.Как исправить небезопасную реализацию X509TrustManager warrning в приложении для Android

«Ваше приложение использует небезопасную реализацию интерфейса 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"); 
} 
+0

_ «Есть ли способ, которым я могу загрузить свою сборку, и могу проверить, что изменения были выполнены отлично и могут жить в этом же приложении». _ Вы можете опубликовать новую версию как альфа или бета-версию и добавить только себя в качестве бета-версии , – Michael

+0

«Я пытаюсь исправить это, выполнив следующий код и обновив мою сборку» - это само определение «небезопасного» X509TrustManager. Удалите его, пожалуйста. «Но все-таки я получаю предупреждение о безопасности» - это потому, что вы не решили проблему, а сделали ее еще хуже. Если вы еще не используете 'X509TrustManager' в своем коде (до того, что вы сделали в этом вопросе), тогда [проблема, вероятно, исходит из библиотеки] (https://commonsware.com/blog/2016/02/22 /about-x509trustmanager-emails.html). – CommonsWare

+0

На странице поддержки Google для этой ошибки: «Чтобы правильно обработать проверку сертификатов SSL, измените свой код в методе checkServerTrusted вашего пользовательского интерфейса X509TrustManager, чтобы повысить или исключение CertificateException или IllegalArgumentException всякий раз, когда сертификат, представленный сервером, не соответствует вашим ожиданиям». Ваша текущая реализация 'X509TrustManager' будет доверять любому сертификату, который был представлен. – Michael

ответ

0

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

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

+0

Я не могу найти вариант для публикации по времени. Но теперь я публикую это приложение в Google Group, возможно, это поможет. – PKTomar

Смежные вопросы