- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个非常简单的 Java 8 项目(FTP 服务器),它使用 Apache FTPS (Mina) 服务器库 (v. 1.1.1)。就像下面的代码一样简单:
ListenerFactory factory = new ListenerFactory();
factory.setPort(2221);
// SSL config
SslConfigurationFactory ssl = new SslConfigurationFactory();
ssl.setKeystoreFile(new File("keystore.jks"));
ssl.setKeystorePassword("password");
// set the SSL configuration for the listener
factory.setSslConfiguration(ssl.createSslConfiguration());
factory.setImplicitSsl(true);
FtpServerFactory serverFactory = new FtpServerFactory();
// replace the default listener
serverFactory.addListener("default", factory.createListener());
//Configure user manager and set admin user
PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory();
userManagerFactory.setFile(new File("users.properties"));
UserManager userManager = userManagerFactory.createUserManager();
if (!userManager.doesExist("admin")) {
BaseUser user = new BaseUser();
user.setName("admin");
user.setPassword("password");
user.setEnabled(true);
user.setHomeDirectory(USER_HOME_DIR);
user.setAuthorities(Collections.<Authority>singletonList(new WritePermission()));
userManager.save(user);
}
serverFactory.setUserManager(userManager);
// start the server
FtpServer server = serverFactory.createServer();
server.start();
需要maven依赖:
<dependency>
<groupId>org.apache.ftpserver</groupId>
<artifactId>ftpserver-core</artifactId>
<version>1.1.1</version>
</dependency>
简单地创建一个自签名 keystore :
keytool -genkey -keyalg RSA -alias self-signed -keystore keystore.jks -validity 360 -keysize 2048
我按照官方指南编写了这段代码:https://mina.apache.org/ftpserver-project/embedding_ftpserver.html
如果我用 Java 8 编译和运行这段代码,我的 FTPS 服务器工作得很好,我可以通过 localhost:2221 和用户名“admin”和密码“password”访问这个服务器。从我的 FTP 客户端(我使用 Filezilla),我可以看到 TLS 连接已成功建立。
如果我使用 Java 11+ 编译并运行相同的代码(我尝试使用 11 和 15),我会在我的 FTP 客户端中看到以下消息,并且目录列表失败:
Status: Connecting to 127.0.0.1:2223...
Status: Connection established, initializing TLS...
Status: Verifying certificate...
Status: TLS connection established, waiting for welcome message...
Status: Logged in
Status: Retrieving directory listing...
Command: PWD
Response: 257 "/" is current directory.
Command: TYPE I
Response: 200 Command TYPE okay.
Command: PASV
Response: 227 Entering Passive Mode (127,0,0,1,225,229)
Command: MLSD
Response: 150 File status okay; about to open data connection.
Error: Received TLS alert from the server: User canceled (90)
Error: Could not read from transfer socket: ECONNABORTED - Connection aborted
Response: 226 Closing data connection.
Error: Failed to retrieve directory listing
这是完整的应用程序日志(带有 VM 参数):
2021-03-30 22:59:09.304 INFO 10557 --- [ main] com.example.ftp.demo.DemoApplication : Starting DemoApplication using Java 11.0.7 on Kara's-MBP with PID 10557 (...)
2021-03-30 22:59:09.306 INFO 10557 --- [ main] com.example.ftp.demo.DemoApplication : No active profile set, falling back to default profiles: default
2021-03-30 22:59:09.601 INFO 10557 --- [ main] com.example.ftp.demo.DemoApplication : Started DemoApplication in 0.487 seconds (JVM running for 1.046)
javax.net.ssl|DEBUG|01|main|2021-03-30 22:59:09.886 CEST|SSLCipher.java:438|jdk.tls.keyLimits: entry = AES/GCM/NoPadding KeyUpdate 2^37. AES/GCM/NOPADDING:KEYUPDATE = 137438953472
2021-03-30 22:59:09.966 INFO 10557 --- [ main] o.a.ftpserver.impl.DefaultFtpServer : FTP server started
2021-03-30 22:59:24.393 INFO 10557 --- [ NioProcessor-3] o.a.f.listener.nio.FtpLoggingFilter : CREATED
2021-03-30 22:59:24.395 INFO 10557 --- [pool-3-thread-1] o.a.f.listener.nio.FtpLoggingFilter : OPENED
javax.net.ssl|DEBUG|1B|NioProcessor-3|2021-03-30 22:59:24.443 CEST|SSLCipher.java:1840|KeyLimit read side: algorithm = AES/GCM/NOPADDING:KEYUPDATE-countdown value = 137438953472
javax.net.ssl|DEBUG|1B|NioProcessor-3|2021-03-30 22:59:24.444 CEST|SSLCipher.java:1994|KeyLimit write side: algorithm = AES/GCM/NOPADDING:KEYUPDATE-countdown value = 137438953472
javax.net.ssl|DEBUG|1B|NioProcessor-3|2021-03-30 22:59:24.472 CEST|SSLCipher.java:1994|KeyLimit write side: algorithm = AES/GCM/NOPADDING:KEYUPDATE-countdown value = 137438953472
javax.net.ssl|DEBUG|1B|NioProcessor-3|2021-03-30 22:59:24.490 CEST|SSLCipher.java:1840|KeyLimit read side: algorithm = AES/GCM/NOPADDING:KEYUPDATE-countdown value = 137438953472
2021-03-30 22:59:24.493 INFO 10557 --- [pool-3-thread-1] o.a.f.listener.nio.FtpLoggingFilter : SENT: 220 Service ready for new user.
2021-03-30 22:59:24.501 INFO 10557 --- [pool-3-thread-1] o.a.f.listener.nio.FtpLoggingFilter : RECEIVED: USER admin
2021-03-30 22:59:24.503 INFO 10557 --- [pool-3-thread-1] o.a.f.listener.nio.FtpLoggingFilter : SENT: 331 User name okay, need password for admin.
2021-03-30 22:59:24.503 INFO 10557 --- [pool-3-thread-1] o.a.f.listener.nio.FtpLoggingFilter : RECEIVED: PASS *****
2021-03-30 22:59:24.505 INFO 10557 --- [pool-3-thread-1] org.apache.ftpserver.command.impl.PASS : Login success - admin
2021-03-30 22:59:24.505 INFO 10557 --- [pool-3-thread-1] o.a.f.listener.nio.FtpLoggingFilter : SENT: 230 User logged in, proceed.
2021-03-30 22:59:24.505 INFO 10557 --- [pool-3-thread-2] o.a.f.listener.nio.FtpLoggingFilter : RECEIVED: OPTS UTF8 ON
2021-03-30 22:59:24.506 INFO 10557 --- [pool-3-thread-2] o.a.f.listener.nio.FtpLoggingFilter : SENT: 200 Command OPTS okay.
2021-03-30 22:59:24.506 INFO 10557 --- [pool-3-thread-1] o.a.f.listener.nio.FtpLoggingFilter : RECEIVED: PBSZ 0
2021-03-30 22:59:24.506 INFO 10557 --- [pool-3-thread-1] o.a.f.listener.nio.FtpLoggingFilter : SENT: 200 Command PBSZ okay.
2021-03-30 22:59:24.507 INFO 10557 --- [pool-3-thread-2] o.a.f.listener.nio.FtpLoggingFilter : RECEIVED: PROT P
2021-03-30 22:59:24.508 INFO 10557 --- [pool-3-thread-2] o.a.f.listener.nio.FtpLoggingFilter : SENT: 200 Command PROT okay.
2021-03-30 22:59:24.508 INFO 10557 --- [pool-3-thread-1] o.a.f.listener.nio.FtpLoggingFilter : RECEIVED: OPTS MLST size;modify;type;
2021-03-30 22:59:24.509 INFO 10557 --- [pool-3-thread-1] o.a.f.listener.nio.FtpLoggingFilter : SENT: 200 Command OPTS okay.
2021-03-30 22:59:24.509 INFO 10557 --- [pool-3-thread-2] o.a.f.listener.nio.FtpLoggingFilter : RECEIVED: CWD /
2021-03-30 22:59:24.511 INFO 10557 --- [pool-3-thread-2] o.a.f.listener.nio.FtpLoggingFilter : SENT: 250 Directory changed to /
2021-03-30 22:59:24.511 INFO 10557 --- [pool-3-thread-2] o.a.f.listener.nio.FtpLoggingFilter : RECEIVED: TYPE I
2021-03-30 22:59:24.512 INFO 10557 --- [pool-3-thread-2] o.a.f.listener.nio.FtpLoggingFilter : SENT: 200 Command TYPE okay.
2021-03-30 22:59:24.512 INFO 10557 --- [pool-3-thread-1] o.a.f.listener.nio.FtpLoggingFilter : RECEIVED: PASV
2021-03-30 22:59:24.513 INFO 10557 --- [pool-3-thread-1] o.a.f.listener.nio.FtpLoggingFilter : SENT: 227 Entering Passive Mode (127,0,0,1,226,235)
2021-03-30 22:59:24.513 INFO 10557 --- [pool-3-thread-2] o.a.f.listener.nio.FtpLoggingFilter : RECEIVED: MLSD
javax.net.ssl|DEBUG|1D|pool-3-thread-2|2021-03-30 22:59:24.526 CEST|SSLCipher.java:1840|KeyLimit read side: algorithm = AES/GCM/NOPADDING:KEYUPDATE-countdown value = 137438953472
javax.net.ssl|DEBUG|1D|pool-3-thread-2|2021-03-30 22:59:24.527 CEST|SSLCipher.java:1994|KeyLimit write side: algorithm = AES/GCM/NOPADDING:KEYUPDATE-countdown value = 137438953472
javax.net.ssl|DEBUG|1D|pool-3-thread-2|2021-03-30 22:59:24.528 CEST|SSLCipher.java:1994|KeyLimit write side: algorithm = AES/GCM/NOPADDING:KEYUPDATE-countdown value = 137438953472
javax.net.ssl|DEBUG|1D|pool-3-thread-2|2021-03-30 22:59:24.529 CEST|SSLCipher.java:1840|KeyLimit read side: algorithm = AES/GCM/NOPADDING:KEYUPDATE-countdown value = 137438953472
javax.net.ssl|ALL|1D|pool-3-thread-2|2021-03-30 22:59:24.533 CEST|SSLSocketImpl.java:994|Closing output stream
javax.net.ssl|DEBUG|1D|pool-3-thread-2|2021-03-30 22:59:24.533 CEST|SSLSocketImpl.java:466|duplex close of SSLSocket
javax.net.ssl|DEBUG|1D|pool-3-thread-2|2021-03-30 22:59:24.534 CEST|SSLSocketImpl.java:1372|close the SSL connection (passive)
2021-03-30 22:59:24.535 WARN 10557 --- [pool-3-thread-2] org.apache.ftpserver.impl.PassivePorts : Releasing unreserved passive port: 58091
2021-03-30 22:59:24.535 INFO 10557 --- [pool-3-thread-2] o.a.f.listener.nio.FtpLoggingFilter : SENT: 150 File status okay; about to open data connection.
2021-03-30 22:59:24.535 INFO 10557 --- [pool-3-thread-2] o.a.f.listener.nio.FtpLoggingFilter : SENT: 226 Closing data connection.
此外,如果我从代码中删除 SSL 支持,即使使用 Java 11+,我的 FTP 服务器也能完美运行。
你们中有人在使用 Apache FTPS 和 Java 11+ 时遇到过类似的问题吗?如果是,您是如何找到解决方案的?
最佳答案
我只能在使用 FileZilla 时重现该问题。例如,当我使用 lftp 时,我可以成功连接到服务器(在信任自签名证书之后)。
FileZilla 似乎对 jdk 的 TLSv1.3 实现有问题。在 Filezilla 的错误追踪器 [1] 中有一个关于此的已关闭(拒绝)票证。
此外,我可以在使用 jdk 8 时重现该问题。从 8u261-b12 [2] 开始,在 jdk 8 中添加并启用了 TLSv1.3。
作为解决方法,您可以使用安全属性 jdk.tls.disabledAlgorithms
[3] 禁用 TLSv1.3,这将强制 jvm 选择另一种算法进行安全握手(希望它是将是 TLSv1.2)。(因为这是一个安全设置,如果您的公司有安全团队,最好与您讨论)。
可以在jdk 的配置文件java.security
中设置或更新安全属性。它的路径取决于您使用的 jdk 和操作系统。
通常在$JAVA_HOME/jre/lib/security或$JAVA_HOME/lib/security下。
如果找不到它,可以通过使用 -Djava.security.debug=all
启动 jvm 来打印它的路径。您应该看到启动日志中打印的路径(可能有多个文件)。查找类似于以下行的内容:
properties: reading security properties file: /usr/lib/jvm/java-11-openjdk-11.0.11.0.9-4.fc34.x86_64/conf/security/java.security
...
properties: reading system security properties file /etc/crypto-policies/back-ends/java.config
您还可以通过在 ssl.createSslConfiguration()
之前添加以下两行以编程方式更新 jdk.tls.disabledAlgorithms
:
String disabledAlgorithms = Security.getProperty("jdk.tls.disabledAlgorithms") + ", TLSv1.3";
Security.setProperty("jdk.tls.disabledAlgorithms", disabledAlgorithms);
这是添加了两行的完整程序:
import org.apache.ftpserver.FtpServer;
import org.apache.ftpserver.FtpServerFactory;
import org.apache.ftpserver.ftplet.Authority;
import org.apache.ftpserver.ftplet.FtpException;
import org.apache.ftpserver.ftplet.UserManager;
import org.apache.ftpserver.listener.ListenerFactory;
import org.apache.ftpserver.ssl.SslConfigurationFactory;
import org.apache.ftpserver.usermanager.PropertiesUserManagerFactory;
import org.apache.ftpserver.usermanager.impl.BaseUser;
import org.apache.ftpserver.usermanager.impl.WritePermission;
import java.io.File;
import java.security.Security;
import java.util.Collections;
public class Main {
public static void main(String[] args) throws FtpException {
String disabledAlgorithms = Security.getProperty("jdk.tls.disabledAlgorithms") + ", TLSv1.3";
Security.setProperty("jdk.tls.disabledAlgorithms", disabledAlgorithms);
ListenerFactory factory = new ListenerFactory();
factory.setPort(2221);
// SSL config
SslConfigurationFactory ssl = new SslConfigurationFactory();
ssl.setKeystoreFile(new File("keystore.jks"));
ssl.setKeystorePassword("password");
// set the SSL configuration for the listener
factory.setSslConfiguration(ssl.createSslConfiguration());
factory.setImplicitSsl(true);
FtpServerFactory serverFactory = new FtpServerFactory();
// replace the default listener
serverFactory.addListener("default", factory.createListener());
//Configure user manager and set admin user
PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory();
userManagerFactory.setFile(new File("users.properties"));
UserManager userManager = userManagerFactory.createUserManager();
if (!userManager.doesExist("admin")) {
BaseUser user = new BaseUser();
user.setName("admin");
user.setPassword("password");
user.setEnabled(true);
user.setHomeDirectory("/tmp/admin");
user.setAuthorities(Collections.<Authority>singletonList(new WritePermission()));
userManager.save(user);
}
serverFactory.setUserManager(userManager);
// start the server
FtpServer server = serverFactory.createServer();
server.start();
}
}
[1] : https://trac.filezilla-project.org/ticket/12099
[2]:https://www.oracle.com/java/technologies/javase/8u261-relnotes.html
关于tls1.2 - Java 11 上的 Apache 嵌入式 FTPS (Mina) 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66878534/
配置 我正在使用来自 apache commons net 3.0.1 的 FtpsClient 与来自 apache ftpserver 1.0.6 的 FtpServer 对话。 客户端和服务器使
我正在运行 Ubuntu 12.10,并且使用 Yahoo Webhosting,并且我还有自己的域“example.com”。我曾经使用 FTP 将文件传输到我的虚拟主机帐户或从我的虚拟主机帐户传输
我在将文件从 Unix/Mac/Linux 环境传输到 Windows FTP 服务器时遇到问题。 而完全相同的 Java 代码可以在 Windows PC 上运行。 来自 *Nix/Mac 的传输仅
我正在使用ftps模块,并且我已经在 Cygwin 上安装了 lftp。我遇到了麻烦,因为我的 Node js 应用程序看起来连接正常,但我的命令都没有运行。该模块的文档不是很详细,所以我只是尽我所能
我们遇到的最初问题是,由于服务器证书不受信任,常规 FTP 下载开始失败。这促使我们想知道证书是否已在对方通知我们的情况下进行了更新,因此我们想下载当前证书并将其与我们 keystore 中的证书进行
仍然没有答案。感谢您提供任何帮助! 我正在使用 Apache Commons-Net3.1 并尝试让 FTPS 正常工作。当我尝试连接时,我在控制台中收到以下错误: ---编辑:代码和错误已更新---
我不知道如何在 iPhone 上制作 FTPS(FTP over SSL)。我想使用下面的代码 ftpStream = CFWriteStreamCreateWithFTPURL(NULL, (CFU
是否有可能通过具有身份验证的代理建立 FTPS 服务器连接? 为了使用代理身份验证连接到普通的 FTP 服务器,我使用了 Apache Commons 的 FTPHTTPClient。但是,我找不到在
我必须使用 SSL 与 FTP 服务器通信。 我收到了一个关于如何使用 WinScp 命令的示例: open ftpes://SomeUser:SomePass@SomeDomain.com/ -ce
我正在尝试使用 ssh/tls 连接到 ftp 服务器,但我使用的每种方法都没有帮助。 FTPSClient ftpsClient = new FTPSClient("TLS", false)
我需要 下载文件结构 (超过 4GB)来自 FTPS 服务器 (基于 TLS 协议(protocol)的隐式 FTP)。不幸的是 wget不支持 FTPS,但是 curl does .然而curl不支
我正在从事应用程序开发工作。在该应用程序上,我正在执行文件存储、检索和删除操作。为了识别服务器上的文件,我使用索引( HashMap 文件)文件。每次执行上传操作时,我都会更新“index”文件并将“
我正在尝试使用此代码将文件上传到 FTP,我遇到的问题是当语法遇到 serverURI.Scheme != Uri.UriSchemeFtp 时它返回 false。这是否意味着我的 URI 地址设置不
我能够通过 FTP 连接到 Apache FTP 服务器 ( http://mina.apache.org/ftpserver-project/index.html )。我按照同样的方式建立FTPS连
我需要将 SUSE Linux Enterprise 12 中的文件上传到仅允许隐式 FTPS 的 FTP 服务器(实际上传需要从 PHP 触发,但我可以运行任意 shell 命令)。默认情况下,防火
我的应用程序需要在上传后更改远程文件权限(STOR)。为此,它使用 ftps 连接。 与 chmod 命令类似,正确的命令是什么? 我搜索了FTP Commands and Extensions我没有
我正在尝试将文件上传到 FTP 服务器 (FTPS)。运行以下代码会产生异常: The remote certificate is invalid according to the validatio
有人要求我使用客户端身份验证证书设置 FTPS 连接。我是客户端,连接到服务器。我在 Windows7 工作站上,在防火墙后面。一些其他信息: 仅限 TLS 1.2 仅被动模式 我的 WAN IP 已
我目前正在尝试使用 PHP 在我们的服务器和远程 FTPS(FTP over SSL)服务器之间传输小文件。我是完成这项工作的标准公平,即 file_put_contents、file_get_con
我有一个场景,我需要将文件上传到远程 FTP 服务器。我尝试上传此文件的机器位于 AWS-VPC 内和 SOCKS 服务器后面,现在我正在使用以下命令来执行此操作 curl --connect-ti
我是一名优秀的程序员,十分优秀!