【问题标题】:Apache Mina FTP Server SFTP configuration and connecting SFTP connection using FileZiza or WInscp or any ftp client took over secure channelApache Mina FTP 服务器 SFTP 配置和连接 SFTP 连接使用 FileZiza 或 WInscp 或任何 ftp 客户端接管安全通道
【发布时间】:2017-05-08 08:43:44
【问题描述】:

我已经从here 下载并创建了 Apache Mina 基础 FTP 服务器。 我可以使用 FTP 进行连接。

当我尝试使用以下配置配置 SFTP 时,当我尝试使用 FIleZila 或任何其他客户端进行 SFTP 连接时出现错误。

服务器配置:

<?xml version="1.0" encoding="UTF-8"?>
<server xmlns="http://mina.apache.org/ftpserver/spring/v1"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xsi:schemaLocation="
       http://mina.apache.org/ftpserver/spring/v1 http://mina.apache.org/ftpserver/ftpserver-1.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"
    id="myServer">

    <listeners>
        <nio-listener name="default" port="2222" implicit-ssl="true"  idle-timeout="60">
            <ssl>
                <keystore file="mykeystore.jks" password="ftpkey"  key-password="ftpkey" />
            </ssl>
        </nio-listener>
    </listeners> 

    <!--<file-user-manager file="users.properties"
        encrypt-passwords="true" />-->

以下是我用来生成证书的命令:

keytool -genkey -alias ftpkeya -keysize 1024 -dname "cn=mydomain.com,o=mycompany,ou=company,l=Capelle,s=NL,c=NL" -keystore mykeystore.jks -keypass ftpkey -storepass ftpkey -keyalg RSA 



keytool -list -keystore mykeystore.jks -storepass ftpkey  -v

keytool -export -alias ftpkeya -keystore mykeystore.jks -storepass ftpkey -file serverCertificate.arm -rfc

我正在使用 keytool 来生成密钥和证书。当我生成证书并在上面的服务器配置中进行配置时,我的服务器以 SFTP 支持启动,但是当我尝试使用 FTP 客户端连接被拒绝时,

我在使用不同 FTP 客户端的服务器日志中遇到不同的异常:

我在使用 WinScp 时的服务器异常日志。

[ WARN] 2017-05-08 09:49:16,018 [] [0:0:0:0:0:0:0:1] EXCEPTION :
org.apache.mina.core.write.WriteToClosedSessionException
    at org.apache.mina.core.polling.AbstractPollingIoProcessor.clearWriteRequestQueue(AbstractPollingIoProcessor.java:641)
    at org.apache.mina.core.polling.AbstractPollingIoProcessor.removeNow(AbstractPollingIoProcessor.java:592)
    at org.apache.mina.core.polling.AbstractPollingIoProcessor.removeSessions(AbstractPollingIoProcessor.java:562)
    at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$800(AbstractPollingIoProcessor.java:68)
    at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1149)
    at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
[ WARN] 2017-05-08 09:49:16,019 [] [0:0:0:0:0:0:0:1] Client closed connection before all replies could be sent, last reply was WriteRequest: HeapBuffer[pos=0 lim=20 cap=20: 35 33 30 20 41 63 63 65 73 73 20 64 65 6E 69 65...]
[ INFO] 2017-05-08 09:49:16,019 [] [0:0:0:0:0:0:0:1] CLOSED

当我使用 filezila 时会有更多不同。

客户端日志:

Status: Waiting to retry...
Status: Connecting to 172.27.136.44:2222...
Response:   fzSftp started, protocol_version=8
Command:    open "admin@172.27.136.44" 2222
Error:  Network error: Connection refused
Error:  Could not connect to server

从 FileZilla 连接时的服务器端日志

 [ WARN] 2017-05-08 09:42:45,913 [] [172.27.136.44] EXCEPTION :
        java.io.IOException: An existing connection was forcibly closed by the remote host
    at sun.nio.ch.SocketDispatcher.read0(Native Method)
    at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
    at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
    at sun.nio.ch.IOUtil.read(IOUtil.java:197)
    at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
    at org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.java:280)
    at org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.java:44)
    at org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:695)
    at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:668)
    at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:657)
    at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$600(AbstractPollingIoProcessor.java:68)
    at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1141)
    at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
[ERROR] 2017-05-08 09:42:45,916 [] [172.27.136.44] Exception caught, closing session
java.io.IOException: An existing connection was forcibly closed by the remote host
    at sun.nio.ch.SocketDispatcher.read0(Native Method)
    at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
    at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
    at sun.nio.ch.IOUtil.read(IOUtil.java:197)
    at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
    at org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.java:280)
    at org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.java:44)

我希望从任何 FTP 客户端连接时服务器日志不应该有任何差异我不明白这里的问题原因和问题所在。我已经参考了这个link.

提前感谢您提供任何帮助和信息。

【问题讨论】:

  • 也向我们展示客户端日志。
  • 已添加客户端 filezilla 日志。我不确定我可以从哪里获得winscp日志。
  • 日志只是证实了我的回答。 - 您正在使用 SFTP 协议连接到 FTP(S) 服务器。那是行不通的。在客户端使用 FTP(S) - 或者如果您确实需要实现 SFTP 服务器,那么您就完全错了。
  • SFTP(SSH 文件传输协议/安全文件传输协议)被设计为 SSH 的扩展以提供文件传输能力,因此它通常只使用 SSH 端口进行数据和控制。
  • 所以如果我想要自定义端口,我应该进行 FTPS 配置,对吗?

标签: apache ssl sftp keytool client-certificates


【解决方案1】:

您显然对 FTP/FTPS/SSL/SFTP 的东西感到困惑。

  • 带有 SSL/TLS 的 FTP 是 FTPS,而不是 SFTP。 SFTP 是一个完全不同且不兼容的协议;而且它不使用 TLS/SSL。
  • 您的默认端口 2222 令人困惑。它看似基于 SSH/SFTP 默认端口 22。虽然 FTP 使用端口 21。对于隐式 TLS/SSL (implicit-ssl="true"),它实际上使用端口 990。虽然没有理由使用隐式 TLS/SSL。

您可能正在尝试使用 SFTP 协议连接到您的 FTP(S) 服务器。

【讨论】:

  • 我们需要特定端口而不是默认端口 22,因此我将 2222 用于测试目的。一旦我们准备好并准备好上线,我们计划在同一个端口打开防火墙。
  • 所以如果我想要自定义端口,我应该进行 FTPS 配置,对吗?我在这个链接中提到:howtogeek.com/194740/…
  • 我只需要 FTPS(也称为 FTP Secure 和 FTP-SSL)我读取您共享的链接和其他链接的 SFTP。我想我可以配置 FTPS 服务器并在客户端和服务器之间交换证书这是我的需要。我通过混合 FTPS 和 SFTS 造成了一些混乱 ..
  • 谢谢,我将添加我的服务器配置更改以及从客户端连接此服务器的步骤。
  • 这是什么意思“我需要FTPS只有SFTP”?所以你想要什么? FTPS 还是 SFTP?
猜你喜欢
  • 2014-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
  • 2014-10-09
相关资源
最近更新 更多