You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache Commons Net 3.4.0与Java 8u201无TLS v1.3支持的解决办法

Java 8u201下FTPS启用TLSv1.3的可行方案

由于Oracle JDK 8u201原生不支持TLSv1.3,且无法升级JDK,可通过以下方案解决:

1. 集成BouncyCastle替代原生JSSE

BouncyCastle提供了独立于JDK的TLSv1.3实现,无需升级JDK即可使用:

  • 引入BouncyCastle的依赖包:bcprov-jdk15on和bctls-jdk15on(建议选1.70及以上版本,确保支持TLSv1.3)
  • 在代码中注册BouncyCastle安全提供者:
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.jsse.provider.BouncyCastleJsseProvider;
import java.security.Security;

// 初始化时注册提供者
Security.addProvider(new BouncyCastleProvider());
Security.addProvider(new BouncyCastleJsseProvider());
  • 配置FTPSClient使用BouncyCastle的SSLContext:
import org.apache.commons.net.ftp.FTPSClient;
import javax.net.ssl.SSLContext;

FTPSClient ftpsClient = new FTPSClient(true);
// 指定使用BCJSSE提供的TLSv1.3实现
SSLContext sslContext = SSLContext.getInstance("TLSv1.3", "BCJSSE");
sslContext.init(null, null, new SecureRandom());
ftpsClient.setSSLContext(sslContext);

// 后续正常执行连接、登录逻辑
ftpsClient.connect("your-ftp-server", 990);
ftpsClient.login("username", "password");

测试时需验证握手是否成功,若Commons Net 3.4.0存在兼容性问题,可显式指定启用TLSv1.3协议参数。

2. 升级Apache Commons Net版本(若允许)

如果项目允许升级Commons Net到3.9.0及以上版本,新版本对自定义SSLContext的支持更完善,搭配BouncyCastle会更稳定。但如果必须保留3.4.0版本,优先采用第一种方案。

3. 临时降级到TLSv1.2(备选)

若上述方案都无法落地,可联系FTP服务器管理员,确认是否开启TLSv1.2支持。虽然这不是启用TLSv1.3的方案,但能保证连接的安全性,作为临时替代方案。

内容的提问来源于stack exchange,提问作者ktckl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 02:20:03