【问题标题】:ssl on android strange issuessl关于android奇怪的问题
【发布时间】:2011-02-18 16:50:56
【问题描述】:

我正在尝试使用 ssl 将文件上传到某个 url。我使用此代码设置信任管理器 -

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

写入错误:系统调用期间的 I/O 错误,Broken pipe java.io.IOException: 写入错误:系统调用期间的 I/O 错误,Broken pipe 在 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)

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

有什么想法吗?

【问题讨论】:

标签: android ssl


【解决方案1】:

来自 android 的家伙报告这是 android sdk http://code.google.com/p/android/issues/detail?id=8625 中的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-28
    • 2021-08-27
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    相关资源
    最近更新 更多