Я пытаюсь загрузить файл на некоторый 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: Ошибка при записи: ошибка ввода-вывода во время системного вызова, Поврежденного канала в org.apache.harmony.xnet.provider.jsse. OpenSSLSocketImpl.nativewrite (Собственный метод) в org.apache.harmony.xnet.provider.jsse. 600 OpenSSLSocketImpl.access$ (OpenSSLSocketImpl.java:55) в org.apache.harmony.xnet.provider.jsse. OpenSSLSocketImpl$SSLOutputStream.write (OpenSSLSocketImpl.java:565) в 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)
Странная вещь состоит в том, что я не получаю исключение все время. Когда я пытаюсь загрузить маленькие файлы (200K), это работает хорошо. или это отказывает очень редкий, но когда я пытаюсь загрузить большие (больше чем 1 МБ), я получаю исключение почти каждый раз.
Какие-либо идеи?