当前位置: 首页 > 知识库问答 >
问题:

JDK 8U161中Apache FTPS客户端中的SSL会话重用[副本]

司徒俊雄
2023-03-14

使用Apache Commons-NET的ftpsclient连接到现代FTP/S服务器是不起作用的。原因在于它们需要SSL会话重用,即来自控制连接的SSL会话需要被重用用于数据连接。

这通常可以在服务器中停用,但这是

  • 不安全
  • 并不总是一个选项(因为服务器可能不在您的控制之下)

在JDK 8U161和9.0.4(?)其中引入了对SSL的一些更改,这些更改在ChangeLog中进行了描述。显然,一些实现细节发生了变化,导致黑客不再工作。

据我所知,现在有以下几种选择:

  • 继续使用JDK 8U152,直到有人找到解决方案/Apache-Commons-Net得到补丁/JDK更改得到回滚(实际上不是一个选项,因为这样会切断生产系统的安全更新)
  • 使用不同的FTPS客户端(我能找到的唯一替代方案是专有的,而且相当昂贵)
  • 尝试对SSLSessionContext实现的更改进行反向工程,以找到新的解决方法。这不仅看起来像是一个不平凡的任务--一个解决方案很可能再次被破解,因此随时可能再次被破解。
  • 不再使用FTP/S
  • http://mail.openjdk.java.net/pipermail/security-dev/2016-december/015254.html
  • https://bugs.openjdk.java.net/browse/jdk-8170813
  • https://issues.apache.org/jira/browse/net-426

共有1个答案

贺季
2023-03-14

这里描述了一种可能的解决方案。

本质上,它是将JDK8u161更改的行为恢复到以前的工作方式。您需要设置system属性

jdk.tls.useExtendedMasterSecret

false执行此操作。

    null
 类似资料:
  • 问题内容: 我有一个脚本,该脚本将由使用SSH登录到服务器的人运行。 有没有一种方法可以自动找出用户连接的IP地址? 当然,我可以问用户(这是程序员的工具,所以没问题),但是如果我发现的话,它会更酷。 问题答案: 检查是否有一个环境变量称为: 要么 (或任何其他环境变量)在用户登录时设置。然后使用用户登录脚本对其进行处理。 提取IP:

  • 我通过SSL证书使用Axis实现调用Web服务。我使用keytool将证书添加到密钥库中。 它显示为"证书已添加到密钥库"。但是当我运行java程序时,我得到以下异常 故障代码:{http://schemas.xmlsoap.org/soap/envelope/}服务器。userException faultSubcode:faultString:javax。网ssl。SSLHandshakeEx

  • 我刚开始穿春靴。到目前为止我还很享受。我已经开发了一个演示SSL rest web服务器,它可以正确处理相互X.509证书身份验证。使用带有自签名客户端和服务器证书的IE浏览器,我测试了演示rest web服务器是否正常工作--服务器和浏览器都成功地交换和验证了彼此的证书。 我很难找到一个SSL客户机示例来说明如何包含客户机证书并发布HTTPS。谁有一个简单的rest客户机示例来说明如何使用我的s

  • iam使用openam与Tomcat7一起使用,下面的行总是产生异常SSOTokenManager manager=SSOTokenManager.getInstance();SSOToken SSOToken=manager.createssotoken(请求); 无效的会话id AMSSOProvider:09/18/2012 01:18:01:882 PM EEST:Thread[http-

  • 问题内容: 我已按照本指南进行操作,以便使用SSL层设置我的Tomcat 8实例,生成客户端和服务器密钥库以及自动签名的公共客户端证书。 我想问题是我真的不知道如何配置Tomcat的连接器… 这是我当前的server.xml文件(已删除不必要的注释): 使用此方法,我尝试访问tomcat欢迎页面: 本地主机:8443 https://本地主机 https:// localhost:8443 但是他

  • 问题内容: 我们的系统与多个Web服务提供商进行通信。它们都是从单个Java客户端应用程序调用的。到目前为止,所有的Web服务都已通过SSL进行,但是没有一个使用客户端证书。好吧,一个新的合作伙伴正在改变这一现状。 使应用程序使用证书进行调用很容易;设置和将做到这一点。但是,现在的问题是如何制作它,使其仅在调用该特定Web服务时使用证书。我想更一般地说,我们希望能够选择要使用的客户端证书(如果有)