使用部分jdk重置Java TLS连接



OWASP依赖检查项目有一个开放的票证(#561),我无法复制或弄清楚到底发生了什么。在某些使用OpenJDK的系统上,访问NVD CVE数据源(https://nvd.nist.gov/download/nvdcve-Modified.xml.gz)的HTTPS连接失败。具体来说,它们在java.net.SocketException: Connection reset上失败了。我无法在我拥有的任何系统上重现这个问题-任何JRE/JDK安装似乎都可以在我的系统上工作(ibm, oracle, open JDK)。

可以在这里找到TLS连接失败的系统的SSL调试日志的要点。有人能解释一下为什么HTTPS下载在某些安装中失败吗?当人们在openJDK中遇到问题并安装Oracle JDK时,下载工作。

谢谢!

——杰里米

根据ssllabs测试,用于下载的站点nvd.nist.gov只支持TLS1.1和TLS1.2,只有几个密码:

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

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

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

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

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

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

  • EC2 Linux机器上安装的OpenJDK 8不支持ECDHE密码套件

最新更新