Python &引用;OSError:[Errno 0]错误";在sslobj.do_中,在FTPS服务器上使用ftplib列出目录时握手

Python &引用;OSError:[Errno 0]错误";在sslobj.do_中,在FTPS服务器上使用ftplib列出目录时握手,python,ssl,ftp,ftplib,Python,Ssl,Ftp,Ftplib,我想连接到包含一些不可信证书的FTPS服务器。当我使用simple时: lftp -u user hostname 然后在dir命令之后出现错误: ls:致命错误:证书验证:不受信任 通过执行以下命令,可以在lftp中解决此问题: lftp -e "set ssl:verify-certificate false" -u user hostname 我尝试在Python中建立相同的连接,例如使用ftplibmodule: import ftplib ftp = ftpl

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

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

ls:致命错误:证书验证:不受信任

通过执行以下命令,可以在
lftp
中解决此问题:

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

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

import ftplib
ftp = ftplib.FTP_TLS()
ftp.connect(hostname, port)
ftp.login(username, password)
ftp.prot_p()
ftp.dir()
但它会引发
OSError
异常:

回溯(最近一次呼叫最后一次):
文件“/usr/lib/python3.8/code.py”,第90行,运行代码
exec(代码,self.locals)
文件“”,第1行,在
文件“/usr/lib/python3.8/ftplib.py”,第558行,在目录中
self.retrlines(cmd,func)
retrlines中的文件“/usr/lib/python3.8/ftplib.py”,第451行
以self.transfercmd(cmd)作为连接\
transfercmd中的文件“/usr/lib/python3.8/ftplib.py”,第382行
返回self.ntransfercmd(cmd,rest)[0]
文件“/usr/lib/python3.8/ftplib.py”,第783行,在ntransfercmd中
conn=self.context.wrap_套接字(conn,
文件“/usr/lib/python3.8/ssl.py”,第500行,在wrap_套接字中
返回self.sslsocket\u类。\u创建(
文件“/usr/lib/python3.8/ssl.py”,第1040行,在创建
self.do_握手
文件“/usr/lib/python3.8/ssl.py”,第1309行,在do_握手中
赛尔夫:握手
操作错误:[错误号0]错误
问题似乎与te类似,因此我也尝试使用其他上下文,如:

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


但是错误仍然是一样的。您知道如何禁用证书验证吗?

这不可能是证书问题,因为您只在
目录下收到错误。
连接成功

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

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