Java 使用一些 JDK 重置 TLS 连接

Java TLS Connection Reset using some JDKs

OWASP 依赖项检查项目有一个未决票证 (#561) that I am unable to reproduce or figure out exactly what is going on. On some systems using OpenJDK HTTPS connections to the NVD CVE Data Feed (https://nvd.nist.gov/download/nvdcve-Modified.xml.gz) 失败。具体来说,它们以 java.net.SocketException: Connection reset 失败。我无法在我拥有的任何系统上重现该问题 - 任何 JRE/JDK 安装似乎都可以在我的系统上运行(ibm、oracle、open jdk)。

可以在 TLS 连接失败的系统中找到 SSL 调试日志的要点 here。谁能阐明为什么某些安装的 HTTPS 下载失败?当人们遇到 openJDK 问题并安装 Oracle JDK 时,下载工作正常。

谢谢!

--杰里米

根据 ssllabs test,用于下载的站点 nvd.nist.gov 仅支持 TLS1.1 和 TLS1.2,只有少数密码:

  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (0xc028)
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014)
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (0xc027)
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013)

将此信息与您链接的日志要点进行比较,您可以看到对于每个提到的密码套件 Java 报告 "Ignoring unavailable cipher suite"。

因此连接总是会失败,因为服务器和客户端没有可用于加密 TLS 连接的共同密码。

从我的角度来看,我会假设使用的 OpenJDK 是在没有椭圆曲线支持的情况下编译的,或者具有禁止使用这些密码的无效配置。

因此是使用的 OpenJDK 版本的配置或构建问题。

编辑:可能与以下问题相关: