Apache Mina FTP 服务器 SFTP 配置和连接 SFTP 连接使用 FileZiza 或 WInscp 或任何 ftp 客户端接管安全通道

标签 apache ssl sftp keytool client-certificates

我已经从 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 生成 keystore 和证书。当我生成证书并在上面的服务器配置中配置时,我的服务器以 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.

在此先感谢您提供的任何帮助和信息。

最佳答案

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

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

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

关于Apache Mina FTP 服务器 SFTP 配置和连接 SFTP 连接使用 FileZiza 或 WInscp 或任何 ftp 客户端接管安全通道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43843286/

相关文章:

java - 我如何链接到我的 Apache Wicket 应用程序中的图像文件夹?

css - Apache 别名不起作用,WAMP

java - 如何从 pom.xml 中提取所有依赖项?

iOS 客户端证书和移动设备管理

ssl - 如何在没有可导出私钥的情况下进行 ECDHE 握手

networking - Golang使用sftp golang库将远程文件复制到本地文件夹

php - apache/php 多个用户映射到应用程序的多个版本

Java 无法使用有效的 SSL 证书

java - Android API 级别 8 从特定文件夹中获取最后拍摄的照片

linux - redhat中的sftp配置