【问题标题】:"OSError: [Errno 0] Error" in sslobj.do_handshake when listing a directory using ftplib on FTPS server在 FTPS 服务器上使用 ftplib 列出目录时,sslobj.do_handshake 中出现“OSError:[Errno 0] 错误”
【发布时间】:2021-03-30 15:17:12
【问题描述】:

我想连接到包含一些不受信任的证书的 FTPS 服务器。当我使用简单时:

lftp -u user hostname

然后在dir 命令之后出现错误:

ls:致命错误:证书验证:不可信

lftp执行以下命令即可解决问题:

lftp -e "set ssl:verify-certificate false" -u user hostname

我正在尝试在 Python 中建立相同的连接,例如使用 ftplib 模块:

import ftplib
ftp = ftplib.FTP_TLS()
ftp.connect(hostname, port)
ftp.login(username, password)
ftp.prot_p()
ftp.dir()

但它引发了OSError 异常:

Traceback (most recent call last):
  File "/usr/lib/python3.8/code.py", line 90, in runcode
    exec(code, self.locals)
  File "<console>", line 1, in <module>
  File "/usr/lib/python3.8/ftplib.py", line 558, in dir
    self.retrlines(cmd, func)
  File "/usr/lib/python3.8/ftplib.py", line 451, in retrlines
    with self.transfercmd(cmd) as conn, \
  File "/usr/lib/python3.8/ftplib.py", line 382, in transfercmd
    return self.ntransfercmd(cmd, rest)[0]
  File "/usr/lib/python3.8/ftplib.py", line 783, in ntransfercmd
    conn = self.context.wrap_socket(conn,
  File "/usr/lib/python3.8/ssl.py", line 500, in wrap_socket
    return self.sslsocket_class._create(
  File "/usr/lib/python3.8/ssl.py", line 1040, in _create
    self.do_handshake()
  File "/usr/lib/python3.8/ssl.py", line 1309, in do_handshake
    self._sslobj.do_handshake()
OSError: [Errno 0] Error

问题似乎与 te OSError during authenticating to an ftps server with ftplib.FTP_TLS 类似,所以我也尝试使用其他上下文,例如:

import ssl
ctx = ssl._create_stdlib_context(ssl.PROTOCOL_TLSv1_2)
ftp = FTP_TLS(context=ctx)

ctx = ssl.ssl._create_unverified_context(ssl.PROTOCOL_TLSv1_2)
ftp = FTP_TLS(context=ctx)

但错误仍然相同。任何想法如何禁用证书验证?

【问题讨论】:

    标签: python ssl ftp ftplib


    【解决方案1】:

    这不可能是证书问题,因为您只会在 dir 收到错误。 connect 成功。

    打开 FTP 数据连接时出现 TLS 错误。很可能根本原因是服务器需要 TLS 会话恢复。

    FTPS with Python ftplib - Session reuse required

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-03
      • 1970-01-01
      • 2020-08-10
      • 1970-01-01
      • 2018-03-19
      • 2021-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多