【问题标题】:SSL peer shut down incorrectly - Alibaba OSS java SDKSSL peer 错误关闭 - 阿里巴巴 OSS java SDK
【发布时间】:2020-05-13 08:19:43
【问题描述】:

尝试使用阿里云的 Java SDK 从阿里云的对象存储服务 (OSS) 消费数据时,出现“SSL 对等体错误关闭”异常。我们正在使用 Oracle Java 8.x、Hadoop 3.x。我们在将其作为 Oozie 工作流运行并将数据保存到 HDFS 路径时遇到此异常。如何解决?

Gradle 依赖:compile(group:'com.aliyun.oss',name:'aliyun-sdk-oss',version:"2.8.3")

 // Create an OSSClient instance.
    ClientBuilderConfiguration clientConfig = new ClientBuilderConfiguration();
    clientConfig.setProxyHost(PROXY_HOST);
    clientConfig.setProxyPort(PROXY_PORT);
    clientConfig.setProtocol(Protocol.HTTPS);

    OSS ossClient = new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET, clientConfig);
    String fileKey = "4868a87eb2a0f7a06c43";
    OSSObject ossObject = ossClient.getObject(BUCKET_NAME, fileKey);
    InputStream objectContent = ossObject.getObjectContent();

    try (InputStream inputStream = objectContent) {
        copyInputStreamToFile(inputStream, targetFile);
    }

例外:

Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.JavaMain], main() threw exception, javax.net.ssl.SSLException: SSL peer shut down incorrectly
org.apache.oozie.action.hadoop.JavaMainException: javax.net.ssl.SSLException: SSL peer shut down incorrectly
...
Caused by: javax.net.ssl.SSLException: SSL peer shut down incorrectly
    at sun.security.ssl.InputRecord.readV3Record(InputRecord.java:596)
    at sun.security.ssl.InputRecord.read(InputRecord.java:532)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975)
    at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:933)
    at sun.security.ssl.AppInputStream.read(AppInputStream.java:105)
    at org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:139)
    at org.apache.http.impl.io.SessionInputBufferImpl.read(SessionInputBufferImpl.java:200)
    at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:178)
    at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:137)
    at java.util.zip.CheckedInputStream.read(CheckedInputStream.java:82)
    at java.io.FilterInputStream.read(FilterInputStream.java:133)
    at com.aliyun.oss.event.ProgressInputStream.read(ProgressInputStream.java:116)
    at java.util.zip.CheckedInputStream.read(CheckedInputStream.java:82)
    at java.io.FilterInputStream.read(FilterInputStream.java:107)
    at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:100)
    at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:68)
    at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:129)

【问题讨论】:

  • 请分享完整的堆栈跟踪

标签: java sdk hdfs oozie alibaba-cloud-oss


【解决方案1】:

您每次都随机或一致地遇到此问题?您没有为人们提供足够的信息来帮助您。到目前为止,您尝试过哪些解决方案?

此错误消息SSL peer shut down incorrectly 是一般消息,可能由多种原因引起。建议大家通读this,一一尝试。

尝试检查远程 SSL 证书,验证其有效性,很可能问题就在那里。

您也可以打开这个-Djavax.net.debug=ssl,handshake,然后提供握手日志,这有助于缩小根本原因。

更新:

打开-Djavax.net.debug=ssl,handshake 需要您对握手过程有一定程度的了解,这在一段时间内可能会很困难。您可以使用mitmproxy 之类的工具来检查 https 流量。

您也可以使用online TLS checker 来检查 TLS 支持。

【讨论】:

  • 感谢您花时间回答。我们尝试了这个选项 -Djavax.net.debug=ssl,handshake。日志很大。我可以在这里分享日志中的任何具体内容吗?请指教
  • @VasanthSubramanian 也许您可以将日志文件附加到某个共享驱动器中并在此处共享链接。日志应该告诉您证书信息。反正你还没回答这个You got this issue randomly or consistently every time
  • @VasanthSubramanian 您要连接的 OSS 域是什么?您可以使用域来检查 SSL 证书详细信息。我也在我的答案中更新了这个。
  • 我们连接的OSS域是oss-cn-shanghai.aliyuncs.com。我们经常面临这个问题。由于安全原因,我无法共享日志文件。我们怀疑单个连接的服务器超时可能是我们问题的原因之一。
  • 好的,如果间歇性出现,可能是网络问题。