python - 在 FTPS 服务器上使用 ftplib 列出目录时 sslobj.do_handshake 中的 "OSError: [Errno 0] Error"

标签 python ssl ftp ftplib

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

lftp -u user hostname
然后在 dir 之后命令有错误:

ls: Fatal error: Certificate verification: Not trusted


问题可以在 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异常(exception):
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)
但错误仍然相同。任何想法如何禁用证书验证?

最佳答案

这不可能是证书问题,因为您只会在 dir 处遇到错误。 . connect成功。
打开 FTP 数据连接时出现 TLS 错误。根本原因很可能是服务器需要 TLS session 恢复。
FTPS with Python ftplib - Session reuse required .

关于python - 在 FTPS 服务器上使用 ftplib 列出目录时 sslobj.do_handshake 中的 "OSError: [Errno 0] Error",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66873738/

相关文章:

python - Doc2Vec 和分类——结果很差

android - 如何在android应用程序和C#桌面应用程序之间建立简单的通信

ssl - startssl 证书不与 Postfix 和 dovecot 一起运行

python - 确认 Python 2.6 ftplib 不支持 Unicode 文件名?备择方案?

php - "php_connect_nonb() failed: Operation now in progress (115)"在 PHP 中使用 TLS/SSL 加密的 FTP 连接 - 未加密的连接有效

python - 乔列斯基分解浮点误差

python - 如何使用 lambda 函数将逗号分隔的键值对转换为字典

python - 求解具有 4 个未知数的大型方程组

ssl - Laravel Homestead - SSL 设置

Java SSL 服务器禁用弱椭圆曲线