SSL на Android, странная проблемаAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 SSL на Android, странная проблема

Сообщение Anonymous »

Я пытаюсь загрузить файл на какой-то URL-адрес, используя SSL. Я использую этот код для установки диспетчера доверия —

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

public static void trustAll () {
TrustManage[] trustEverythingTrustManager = new TrustManager[] {
new X509TrustManager() {

public void checkClientTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
// TODO Auto-generated method stub
}

public void checkServerTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
// TODO Auto-generated method stub

}

public X509Certificate[] getAcceptedIssuers() {
// TODO Auto-generated method stub
return null;
}

}
};

SSLContext sc;
try {
sc = SSLContext.getInstance("TLS");
sc.init(null, trustEverythingTrustManager, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (Exception e) {
}
}
а этот для установки средства проверки имени хоста —

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

public static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {

public boolean verify(String hostname, SSLSession session) {
return true;
}
};
затем я открываю соединение вот так -

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

URL url = new URL("some_url");
HttpURLConnection connection = null;
// check if this is https or just http
if (url.getProtocol().toLowerCase().equals("https")) {
trustAll();
HttpsURLConnection https = (HttpsURLConnection) url.openConnection();
https.setHostnameVerifier(DO_NOT_VERIFY);
connection = https;
} else {
connection = (HttpURLConnection) url.openConnection();
}
После того, как я получу соединение, я использую его для загрузки данных. Использую ли я http, все в порядке, но когда я пробую https, я получаю следующее исключение:

Ошибка записи: ошибка ввода-вывода во время системного вызова, сломанный канал
java.io.IOException: ошибка записи: ошибка ввода-вывода во время системного вызова, сломанный канал
at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.nativewrite(Native Method)
at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.access$600(OpenSSLSocketImpl.java:55)
at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLOutputStream.write(OpenSSLSocketImpl.java:565)
at java.io.OutputStream.write(OutputStream.java:82)
на org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection$HttpOutputStream.write(HttpURLConnection.java:652)
на java.io.DataOutputStream.write(DataOutputStream.java:101)

Странно то, что я не получаю исключения постоянно. Когда я пытаюсь загрузить небольшие файлы (200 КБ), все работает нормально. или происходит сбой очень редко, но когда я пытаюсь загрузить файлы большего размера (более 1 МБ), я почти каждый раз получаю исключение.

Есть идеи?

Подробнее здесь: https://stackoverflow.com/questions/282 ... ange-issue
Ответить

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

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

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

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

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