【问题标题】:Connect to FTP server with TLS/SSL Implicit Encryption in Node.js在 Node.js 中使用 TLS/SSL 隐式加密连接到 FTP 服务器
【发布时间】:2019-10-18 21:13:29
【问题描述】:

我有 Node.js 应用程序,我正在尝试连接到 FTP 服务器并列出 FTP 服务器文件夹中的文件夹/文件。

服务器配置:TLS/SSL 隐式加密

这是我的代码:

async function listFilesInFtpFolder() {
  const client = new ftp.Client()
  client.ftp.verbose = true;
  try {
      await client.access({
          host: ftpConfig.host,
          user: ftpConfig.user,
          password: ftpConfig.password,
          port: ftpConfig.port,
          secure: false
      });

      // ********************** NOTE **********************
      // The execution never reaches here, it gets stuck in the 
      // ... previous statement until it times out
      // ********************** NOTE **********************

      console.log('connected');
      console.log(await client.list())

  }
  catch(err) {
      console.log(err)
  }
  client.close()
}

收到此错误:

Listening on port 3001
Connected to 155.66.22.88:6610

Error: Timeout (control socket)
    at Socket.<anonymous> (C:\Dev\my-app\node_modules\basic-ftp\dist\FtpContext.js:296:58)
    at Object.onceWrapper (events.js:298:28)
    at Socket.emit (events.js:209:13)
    at Socket._onTimeout (net.js:468:8)
    at listOnTimeout (internal/timers.js:531:17)
    at processTimers (internal/timers.js:475:7)

执行永远不会到达这些行:

      console.log('connected');
      console.log(await client.list())

等待访问方法时卡住,直到超时 出于某种奇怪的原因,访问方法报告“已连接”

请注意,如果我使用 WinSCP (https://winscp.net/) 之类的程序连接到此 FTP 服务器,我可以连接并查看文件夹。但由于某些奇怪的原因,我无法从 nodejs 连接。我也尝试了很多 FTP 库。

【问题讨论】:

  • 有人知道我为什么无法连接吗?
  • "FTP 服务器配置为:TLS/SSL 隐式加密",但是你设置了secure: false ?
  • @BenBeri 无论我将其设置为真还是假,结果都相同。这是此属性的文档:“(property) AccessOptions.secure?: boolean Use explicit FTPS over TLS. Optional, default is false.”
  • 你确定这个端口吗?
  • @MohammedNagy 是的 100% 确定端口,正如我所说,如果我使用 WinSCP 之类的程序进行连接,它可以正常工作,但由于某种原因,它不能从 Node.js 工作,我想不通为我的一生而奋斗。

标签: javascript node.js reactjs ftp ftps


【解决方案1】:

Node.js 好像不支持隐式 TLS/SSL。

例如:
https://github.com/mscdex/node-ftp/issues/153

您确定您的服务器不支持显式 TLS/SSL?

【讨论】:

  • 不幸的是我无法控制那部分,他们为服务器配置了隐式 TLS/SSL,我不确定 Node.js 不支持隐式 TLS/SSL,我认为 Node 不在乎你说的是我使用的库吗?
  • 你试过显式模式了吗?
  • 您到底尝试了什么?你能发布 WinSCP 日志文件吗?
  • 服务器配置为隐式模式我只能使用隐式模式。
  • 我意识到几乎所有支持隐式的 FTPS 节点库都存在错误或维护不当,我最终购买了一个 .NET FTP 库工作得非常好,不得不创建一个单独的 WebAPI 应用程序来调用我的节点应用程序
【解决方案2】:

假设您正在使用来自 npm 的 ftp 模块

根据文档https://www.npmjs.com/package/ftp#methods secure 选项接受混合类型,试试 'implicit'

安全 - 混合 - 设置为 true 用于控制和数据连接加密,“控制”仅用于控制连接加密,

或 'implicit' 用于隐式加密控制连接(此模式在现代已弃用,但通常使用端口 990)默认值:false

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-18
    • 2015-04-26
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 2012-08-23
    相关资源
    最近更新 更多