如何解决javax.net.ssl.SSLHandshakeException:握手期间远程主机关闭连接

问题描述

我正在尝试使用AWS Lambda上的Apache commons FileUtils从URL下载文件。 但是我得到了这个例外。

javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:994)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1564)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:263)
at java.net.URL.openStream(URL.java:1045)
at org.apache.commons.io.FileUtils.copyURLToFile(FileUtils.java:1478)

我在AWS Lambda中使用了Java 8。 我尝试过

System.setProperty("https.protocols","SSLv3,TLSv1,TLSv1.1,TLSv1.2");
Security.setProperty("jdk.tls.disabledAlgorithms","");
public static void addSslToTrustStore() throws NoSuchAlgorithmException,KeyManagementException {
        TrustManager[] trustAllCerts = new TrustManager[]{new x509trustmanager() {
            public java.security.cert.X509Certificate[] getAcceptedissuers() {
                return null;
            }

            public void checkClientTrusted(X509Certificate[] certs,String authType) {
            }

            public void checkServerTrusted(X509Certificate[] certs,String authType) {
            }
        }
        };

        // Install the all-trusting trust manager
        SSLContext sc = SSLContext.getInstance("SSL");
        sc.init(null,trustAllCerts,new java.security.SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

        // Create all-trusting host name verifier
        HostnameVerifier allHostsValid = new HostnameVerifier() {
            public boolean verify(String hostname,SSLSession session) {
                return true;
            }
        };

        // Install the all-trusting host verifier
        HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
    }

这些都是我在网上找到的所有选项,但对我没有用。 文件在任何本地都下载到我的本地,但在lambda上抛出异常。 请帮助我。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)