我正在为我的应用构建一个 SFTP/FTPS 插件,可以登录到 FTPS 或 SFTP 服务器。 FTPS 和 SFTP 的身份验证属性有哪些不同?

I'm building a SFTP/FTPS plugin for my app that can login to FTPS or SFTP servers. What authentication properties are different for FTPS and SFTP?

我的应用程序需要从远程 FTPS 或 SFTP 服务器访问文件,具体取决于我的应用程序用户想要连接到的内容。我需要能够访问文件夹中的文件内容或创建文件夹。 1) 用户必须输入的 FTPS 和 SFTP 服务器的登录属性有哪些不同? 2) 有什么方法可以检测它是 SFTP 还是 FTPS 服务器?

  1. SFTP 没有任何身份验证。 SFTP 协议应该在 SSH 连接上使用,因此它依赖于 SSH 进行身份验证。所以SSH的所有认证机制都适用。此类机制的列表很广泛——您可以使用密码、私钥 ("public-key authentication")、X.509 证书(不是一个流行的选项)、键盘交互(挑战-响应)对话框,也可以通过 GSS- API 您可以使用 Kerberos 和可能的其他机制。 FTPS as FTP-over-TLS 也可以使用各种机制。 FTP 默认使用 username/password,但可以使用 SITE 命令实现一些棘手的机制。 TLS 协议包括使用 X.509 证书、预共享对称密钥、纯 PKI 密钥、OpenPGP 密钥的客户端身份验证。

  2. SFTP 和 FTP/FTPS 是完全 不同的协议。不同端口上的服务器 运行。如果你想实现协议自动检测,你可以尝试以下方法:连接到服务器,如果它在 200-500 毫秒内发送欢迎 SSH 消息,你就知道它是一个 SSH(并且可能是 SFTP)服务器.如果它发送欢迎 FTP 消息,则它是一个 FTP 服务器(这包括 FTPS 的显式 TLS 模式)。如果它什么都不发送,那么它 可以 是一个 TLS 服务器,并且您可以通过此连接隐式 FTPS。