Небезопасная реализация интерфейса X509TrustManager от GoogleAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Небезопасная реализация интерфейса X509TrustManager от Google

Сообщение Anonymous »

У меня есть приложение в Google Play, я получил письмо от Google со следующим сообщением:


Ваши приложения перечислены в списке В конце этого письма используется небезопасная реализация интерфейса X509TrustManager. В частности, реализация игнорирует все ошибки проверки сертификата SSL при установке HTTPS-соединения с удаленным хостом, тем самым делая ваше приложение уязвимым для атак «человек посередине».

Чтобы правильно обрабатывать проверку сертификата SSL, измените свой код в методе checkServerTrusted вашего пользовательского интерфейса X509TrustManager, чтобы он вызывал либо CertificateException, либо IllegalArgumentException всякий раз, когда сертификат, представленный сервером, не соответствует вашим ожиданиям.


Мое приложение использует https, мой checkServerTrusted() следующий:

Код: Выделить всё

 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;
}
};
Затем я модифицирую эту функцию:

Код: Выделить всё

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

public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
if (chain == null) {
throw new IllegalArgumentException("checkServerTrusted: X509Certificate array is null");
}

if (!(chain.length > 0)) {
throw new IllegalArgumentException("checkServerTrusted: X509Certificate is empty");
}

if (!(null != authType && authType.equalsIgnoreCase("RSA"))) {

throw new CertificateException("checkServerTrusted: AuthType is not RSA");
}
}

public X509Certificate[] getAcceptedIssuers() {
return null;
}
собственная SSLSocketFactory:

Код: Выделить всё

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

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

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


функция HttpClient:

Код: Выделить всё

private static HttpClient getHttpClient(int timeout) {
if (null == mHttpClient) {

try {
KeyStore trustStore = KeyStore.getInstance(KeyStore
.getDefaultType());
trustStore.load(null, null);
SSLSocketFactory sf = new MySSLSocketFactory(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

HttpParams params = new BasicHttpParams();

HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params,
HTTP.DEFAULT_CONTENT_CHARSET);
HttpProtocolParams.setUseExpectContinue(params, true);

ConnManagerParams.setTimeout(params, timeout);

HttpConnectionParams.setConnectionTimeout(params, timeout);

HttpConnectionParams.setSoTimeout(params, timeout);

SchemeRegistry schReg = new SchemeRegistry();
schReg.register(new Scheme("http", PlainSocketFactory
.getSocketFactory(), 80));
schReg.register(new Scheme("https", sf, 443));

ClientConnectionManager conManager = new ThreadSafeClientConnManager(
params, schReg);

mHttpClient = new DefaultHttpClient(conManager, params);
} catch (Exception e) {
e.printStackTrace();
return new DefaultHttpClient();
}
}
return mHttpClient;
}
Но я не очень хорошо разбираюсь в этом, я просто изменяю свой код в соответствии с тем, что было сказано в электронном письме, я думаю, что мне не понравилась эта проблема. О чем это предупреждение? ? Как это решить?

Подробнее здесь: https://stackoverflow.com/questions/355 ... rom-google
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»