Я получаю предупреждение системы безопасности о загруженной мной сборке 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");
}
X509TrustManager
. Удалите, пожалуйста. Но все же я получаю предупреждение системы безопасности - это потому, что вы не устранили проблему, а только усугубили ее. Если вы еще не использовалиX509TrustManager
в своем коде (до того, что вы делали в этом вопросе), тогда вероятно, проблема связана с библиотекой. - person CommonsWare   schedule 29.02.2016X509TrustManager
будет доверять любому сертификату, с которым он был представлен. - person Michael   schedule 29.02.2016