Android 发出GET请求时发生SSLProtocolException

Android 发出GET请求时发生SSLProtocolException,android,https,Android,Https,我们有一个sdk,可以集成在android应用程序中。sdk发出一些HTTP/HTTPS GET请求。 下面是执行此操作的代码 public boolean sendDataToServer(String url) { try { HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection(); int responseCode = conn.getResponseCod

我们有一个sdk,可以集成在android应用程序中。sdk发出一些HTTP/HTTPS GET请求。 下面是执行此操作的代码

public boolean sendDataToServer(String url) {
    try {
        HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
        int responseCode = conn.getResponseCode();
        if(responseCode != 200) {
            String responseBody = getAndClose(conn.getErrorStream());
            return false;
        }
    } catch (Exception e) {
        return false;
    }
    return true;
}

private  String getAndClose(InputStream stream) throws IOException {
    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
        String line;
        StringBuilder content = new StringBuilder();
        while ((line = reader.readLine()) != null) {
            content.append(line).append('\n');
        }
        return content.toString();
    } finally {
        if (stream != null) {
            stream.close();
        }
    }
}
但是,对于一个应用程序,当它尝试使用HTTPS连接时,会出现以下错误

IOExcetion while sending the data to server javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x650ed348: Failure in SSL library, usually a protocol error
error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure (external/openssl/ssl/s23_clnt.c:741 0x5e84cf1c:0x00000000)
在同一个设备中,如果我安装了另一个带有sdk的应用程序,并发出相同的GET请求,那么它工作正常,我会得到200个OK响应


为什么会发生这种情况以及如何防止这种情况?

使用HttpUrlConnection.setDefaultSSLSocketFactory()方法


您需要HTTPS的SSLCertificate
    final TrustManager[] certs = new TrustManager[]{new X509TrustManager() {

        @Override
        public X509Certificate[] getAcceptedIssuers() {
            X509Certificate[] x509Certificates = new X509Certificate[0];
            return x509Certificates;
        }

        @Override
        public void checkServerTrusted(final X509Certificate[] chain,
                                       final String authType) {
        }

        @Override
        public void checkClientTrusted(final X509Certificate[] chain,
                                       final String authType) {
        }
    }};

    SSLContext ctx = null;

    ctx = SSLContext.getInstance("TLS");
    ctx.init(null, certs, new SecureRandom());



    HttpUrlConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory();