Косенко Данила Юрьевич (kosenko_danila) wrote,
Косенко Данила Юрьевич
kosenko_danila

Categories:

Вопрос к тем, кто программирует в андроиде

Всё, мой мозг сломался, я не понимаю, чего нужно гуглу.

Вопрос к тем, кто программирует в андроиде.

Мне нужно получить строку через https соединение с сервером из андроида. Беру самый простой пример.

---------
public String getStr(String link){

String resultJson = "";

try{


URL url = new URL(link);

HttpsURLConnection con = (HttpsURLConnection)url.openConnection();
con.setRequestMethod( "GET" );

SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, new TrustManager[] {
new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain, String authType) {}
public void checkServerTrusted(X509Certificate[] chain, String authType) {}
public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[]{}; }
}
}, null);

HostnameVerifier hostnameVerifier = new HostnameVerifier() {

public boolean verify(String s, SSLSession sslSession) {
return s.equals(sslSession.getPeerHost());
}
};
con.setHostnameVerifier(hostnameVerifier);


con.setSSLSocketFactory(sslContext.getSocketFactory());


int responseCode = con.getResponseCode();
InputStream inputStream;
if (responseCode == HttpsURLConnection.HTTP_OK) {
inputStream = con.getInputStream();
} else {
inputStream = con.getErrorStream();
}

// Process the response
StringBuffer buffer = new StringBuffer();
BufferedReader reader;
String line = null;
reader = new BufferedReader( new InputStreamReader( inputStream ) );
while( ( line = reader.readLine() ) != null )
{
buffer.append(line);

}
resultJson = buffer.toString();
inputStream.close();


}catch(Exception e){

return "-1";

}
return resultJson;

}

---------------------

Всё компилируется и работает.
После заливки Гугл ругается
--------
В одном или нескольких из ваших приложений используется небезопасная реализация интерфейса X509TrustManager. Она игнорирует все ошибки, возникающие при проверке сертификата SSL и установке HTTPS-соединения с удаленным хостом. При этом приложение становится уязвимым для атак посредников, с помощью которых злоумышленники могут прочитать или даже подменить данные, передаваемые по HTTPS-соединению (например, учетные данные).
[...]
Чтобы избежать проблем при проверке сертификата SSL, измените код метода checkServerTrusted в интерфейсе X509TrustManager, чтобы при обнаружении подозрительных сертификатов срабатывало исключение CertificateException или IllegalArgumentException. Обратите внимание на следующие частые ошибки:

Убедитесь, что метод не перехватывает исключения checkServerTrusted, иначе checkServerTrusted прекратит работу и угроза вредоносных сертификатов сохранится.

Не используйте checkValidity для проверки сертификата сервера. Этот метод проверяет срок действия сертификата, а не его безопасность.
----------------

Вопрос к тем, кто программирует в андроиде. Чего им надо? Чтобы срабатывало или не перехватывать? Как именно должно срабатывать? Примеры, что я видел и пробовал применять, содержали именно checkValidity. Тогда чем проверять безопасность сертификата?

На stackoverflow я тоже был и пробовал варианты оттуда - гугл ругается опять.
Если есть профильные сообщества ЖЖ по андроиду, прошу сказать, потому что не нагуглил.

Вот такой я тупой сегодня. Решил, что лучше спрошу совета, чем буду биться головой об стенку. Может быть, кто-то сталкивался или у кого-то есть знакомый, который может подсказать. Хотя бы ссылку кинуть.

Обновлено.

Заменил этот кусок
------
sslContext.init(null, new TrustManager[] {
new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain, String authType) {}
public void checkServerTrusted(X509Certificate[] chain, String authType) {}
public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[]{}; }
}
}, null);
-------

на этот
----------
sslContext.init(null, null, null);
------
Посмотрим, что ответит гугл.
Tags: жизнь, памятка, программирование
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 10 comments