代码之家  ›  专栏  ›  技术社区  ›  Mojo Risin

Android上的SSL奇怪问题

  •  5
  • Mojo Risin  · 技术社区  · 16 年前

    我正在尝试使用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错误,管道断开 java.i o.ioexception:写入错误:系统调用期间发生I/O错误,管道断开 在org.apache.harmony.xnet.provider.jsse.opensslsocketimpl.nativewrite(本机方法)上 在Org.Apache .NET.xNET.Posial.jSS.OpenSSLoCKTIMP.Access 600美元(OpenSSLoCKIDEPPL.java:55) 在Org.Apache .xNET.Posial.jsE.OpenSSLoCKTIMPL $ sSLututsField.Wrad(OpenSSLoCKIDEPPL.java:565) 在Java.Io.OuttStudio.Wrrad(OuttStudio.java:82) 在Org.Apache .Huni.NET.NET .www.协议. http.httpUpLink $httpOuttStudio.Wrrad(httpLooCorn.java:652) 在Java.IO .DATAOuttStudio.Wrrad(DATAOuttStudio.java:101)

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

    有什么想法吗?

    1 回复  |  直到 16 年前
        1
  •  3
  •   Mojo Risin    16 年前

    android的人报告说android sdk有漏洞 http://code.google.com/p/android/issues/detail?id=8625 .