【问题标题】:Use domain name to connect to embedded Apache FtpServer使用域名连接嵌入式 Apache FtpServer
【发布时间】:2026-01-23 04:45:01
【问题描述】:

我正在尝试使用 Apache FtpServer 在 Java 中设置一个简单的测试 FTPS 服务器,并使用域名而不是 IP 地址连接到它。

我已将 A 记录指向 IP 地址并设置了 SSL 证书。基于Apache FtpServer documentation,这是我的代码到目前为止的样子:

        FtpServerFactory ftpServerFactory = new FtpServerFactory();
        ListenerFactory listenerFactory = new ListenerFactory();
        listenerFactory.setPort(990);
        listenerFactory.setServerAddress("example.com");

        SslConfigurationFactory sslConfigurationFactory = new SslConfigurationFactory();
        sslConfigurationFactory.setKeystoreFile(JKS);
        sslConfigurationFactory.setKeystorePassword(JKS_PASS);
        listenerFactory.setSslConfiguration(sslConfigurationFactory.createSslConfiguration());
        listenerFactory.setImplicitSsl(true);

        ftpServerFactory.addListener("default", listenerFactory.createListener());

        PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory();
        userManagerFactory.setFile(USERS_PATH.toFile());

        BaseUser test = new BaseUser();
        sample1.setName("test");
        sample1.setPassword("test");
        sample1.setHomeDirectory(HOME.getAbsolutePath().toString());
        test.setAuthorities(List.of(new WritePermission());

        UserManager userManager = userManagerFactory.createUserManager();
        try {
            userManager.save(test);
        }
        catch (FtpException e) {
            e.printStackTrace();
        }

        ftpServerFactory.setUserManager(userManager);

        FtpServer server = ftpServerFactory.createServer();
        try {
            server.start();
        }
        catch (FtpException e) {
            e.printStackTrace();
        }

但是,当我尝试连接到 FTPS 服务器时,我从我的 FTPS 客户端收到一个ECONNREFUSED - Connection refused by server

有没有我遗漏的步骤?

【问题讨论】:

    标签: java dns network-programming apache-mina apache-ftpserver


    【解决方案1】:

    如果您的客户端报告“连接被拒绝”,这通常表明(不保证)没有防火墙阻止 TCP 流量,则连接请求最终在预期的机器上,但没有任何东西在您尝试连接的端口上接受连接.

    您可以检查的内容: 服务器进程是否正在运行?服务器进程是否在正确的端口上?客户端是否连接到正确的端口?

    您可能会尝试与另一个客户端(例如 curl)连接,以查看是否可以建立 TCP 连接。 您可以尝试连接到另一个端口(例如 22 / ssh)以查看客户端是否可以建立连接。

    【讨论】:

    • 你是对的。经过进一步检查,我意识到我使用的域名似乎有问题。我使用了另一个域名,但仍然无法使 FTPS 服务器工作,但我得到了一个不同的错误,输出更有用。我将所有内容都放入了一个新问题(*.com/questions/70905028/…),因为我觉得此时它太不同了。我也只关注新问题中问题的 SSL 方面。