SSL在Android奇怪的问题 [英] ssl on android strange issue

查看:249
本文介绍了SSL在Android奇怪的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想上传一个文件给一些URL使用SSL。我用这个code设置信任管理器 -

I am trying to upload a file to some url using ssl. I use this code to set trust manager -

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) {
    }
}

和这一次来设置主机名验证 -

and this one to set host name verifier -

public static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {

    public boolean verify(String hostname, SSLSession session) {
        return true;
    }
};

这样的话,我打开连接 -

then i am opening connection like this -

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我得到了以下异常 -

After i get the connection i use it to upload the data. Is i use http everything is ok but when i try https i get the following exception -

写错误:系统调用,管道中断在I / O错误 java.io.IOException异常:系统调用,管道中断在I / O错误:写入错误 在org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.nativewrite(本机方法) 在org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.access $ 600(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)

Write error: I/O error during system call, Broken pipe java.io.IOException: Write error: I/O error during system call, Broken pipe 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) at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection$HttpOutputStream.write(HttpURLConnection.java:652) at java.io.DataOutputStream.write(DataOutputStream.java:101)

但奇怪的是,我没有得到异常的所有时间。当我尝试上传小文件(200K),它工作正常或者它崩溃非常罕见,但是当我尝试上载大的人(超过1MB)我几乎每一次得到的异常。

The strange thing is that i don't get exception all the time. When i try to upload small files (200K) it's working O.K. or it's crashing very rare but when i try to upload bigger ones (more than 1MB) i get the exception almost every time.

任何想法?

推荐答案

从Android上的人报告说,在Android SDK中的 HTTP:?//$c$c.google.com/p/android/issues/detail ID = 8625

The guys from android reported that is bug in android sdk http://code.google.com/p/android/issues/detail?id=8625.

这篇关于SSL在Android奇怪的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆