使用Maven建立FTP SSL连接时出现无主题备用名称问题
看起来你已经正确切换到了FTPS协议,但证书验证失败是这个场景下的常见问题,我给你几个实用的解决方向:
1. 将服务器SSL证书导入JVM信任库(推荐生产环境使用)
这是最安全的做法,让你的Maven使用的JVM信任FTP服务器的证书:
第一步:获取服务器证书
打开终端,执行以下命令抓取证书(替换成你的服务器地址和端口,FTPS隐式默认990,显式默认21):openssl s_client -connect ftp01.company.nl:990 </dev/null | openssl x509 -outform PEM > ftp-server.crt执行后会生成一个
ftp-server.crt文件,里面就是服务器的证书内容。第二步:导入到JVM信任库
找到你Maven使用的JDK的cacerts文件路径(通常在$JAVA_HOME/jre/lib/security/cacerts),执行导入命令:keytool -import -alias ftps-company -file /path/to/ftp-server.crt -keystore $JAVA_HOME/jre/lib/security/cacerts输入默认密码
changeit,然后确认“是否信任此证书”,输入yes即可。
2. 临时跳过证书验证(仅限测试/调试环境)
如果你只是测试环境临时用,不想导入证书,可以配置Maven插件跳过证书检查。假设你用的是Maven Wagon插件(大部分FTP上传场景都会用到),可以这么配置:
在你的
settings.xml(用户目录下的.m2/settings.xml或者Maven全局配置)里添加服务器配置:<servers> <server> <id>ftps-repo</id> <username>your-username</username> <password>your-password</password> <configuration> <ftp> <secure>true</secure> <passiveMode>true</passiveMode> <!-- 跳过证书验证 --> <verifyServerCertificate>false</verifyServerCertificate> </ftp> </configuration> </server> </servers>然后在项目的
pom.xml里关联这个服务器ID:<distributionManagement> <repository> <id>ftps-repo</id> <url>ftps://ftp01.company.nl/your-upload-path</url> </repository> </distributionManagement>⚠️ 注意:生产环境绝对不要这么做,会暴露安全风险!
3. 确认FTPS连接模式是否匹配
FTPS有两种模式:隐式(Implicit) 和 显式(Explicit),如果模式不匹配也可能导致证书问题:
- 隐式模式:默认端口990,连接时直接用SSL加密
- 显式模式:默认端口21,先建立普通FTP连接,再升级为SSL连接
如果你的服务器用的是显式模式,可能需要在配置里明确指定:
在settings.xml的服务器配置里添加:
<ftp> <secure>true</secure> <explicit>true</explicit> <!-- 指定显式模式 --> <passiveMode>true</passiveMode> </ftp>
如果尝试以上方法还是不行,可以检查下服务器证书是否是自签名的、证书有效期是否过期,或者联系对方运维确认证书的颁发链是否完整。
内容的提问来源于stack exchange,提问作者Staalk

