【问题标题】:Cannot establish SSL connection with FTP using certfile (python)无法使用 certfile (python) 与 FTP 建立 SSL 连接
【发布时间】:2020-10-28 18:51:59
【问题描述】:

我正在尝试使用 ftplib 与 FTP 服务器建立连接。 我收到了两个文件,一个扩展名为 .crt 的证书和一个 PEM 格式的证书(RSA KEY + 证书)。

我正在使用 PEM 格式的证书通过以下代码创建上下文:

import ssl
from ftplib import FTP_TLS

ssl_context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
ssl_context.load_cert_chain('./certificate3') 
ftps = FTP_TLS(context = ssl_context)
ftps.connect(host, porta)
ftps.login(user = user, passwd = pwd)
ftps.prot_p()
ftps.nlst()

如果我删除最后一个命令 (nlst),我会收到响应:'230 Logged on'。 因此,当我尝试使用 nlst() 命令提取 FTP 中的文档列表时,我收到一条错误消息:

TimeoutError: [WinError 10060] A connection attempt failed because the connected component did not respond
correctly after a period of time or the established connection has failed
because the connected host did not respond

有谁知道出了什么问题以及如何修复代码以建立连接?

【问题讨论】:

  • 您能否使用与您的 Python 代码在同一台机器上运行的任何 GUI/命令行 FTP 客户端获取启用了 SSL 的目录内容?

标签: python ftp ftplib


【解决方案1】:

我可以用 WinSCP 建立与 FTP 服务器的连接。 通过 WinSCP,我可以运行一个脚本来将服务器与我的本地目录同步。您可以在下面找到命令:

option batch abort
option confirm off
open ftp://user:password@hostserver:port -hostkey="SHA256 KEY"
synchronize local local_path remote_path
exit

此命令必须在.txt 文件中,并通过.bat 文件执行此命令。

希望我能帮助其他人解决同样的问题。

【讨论】:

  • 此 WinSCP 脚本不使用加密/SSL(除非您在 WinSCP 中有一个已启用 SSL 且名称为 ftp://user:password@hostserver:port 的存储站点——这似乎难以置信)+ -hostkeyftp:// 无效会议。
  • 我尝试了不同的方法来建立与 SSL 的连接,但没有成功。不幸的是,社区中没有人回答我的问题。我确定了这种对我有用的方式(WINSCP),因此我回答了我自己的问题以与社区分享这种替代方式。如果您知道如何使用 ftplib 和 SSL 建立,如果您也能帮助我,我将不胜感激。
  • 我认为你没有回答你自己的问题。我相信由于 SSL,您在使用 ftplib 时遇到了问题。如果您选择放弃安全性作为解决方法,我很确定 ftplib 可以在没有 SSL 的情况下工作。可能没有理由同时放弃 SSL 和切换 FTP 客户端。我不介意你选择了我的 WinSCP :)
  • 一旦你不介意,我会继续使用你的 winscp 而不是 ftplib =)
猜你喜欢
  • 2015-04-01
  • 1970-01-01
  • 2018-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多