如何解决在 FTPS 服务器上使用 ftplib 列出目录时,sslobj.do_handshake 中出现“OSError: [Errno 0] Error”
我想连接到包含一些不受信任的证书的 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)
但是错误还是一样。任何想法如何禁用证书验证?
解决方法
这不可能是证书问题,因为您仅在 dir
处收到错误。 connect
成功。
您在打开 FTP 数据连接时收到 TLS 错误。很可能根本原因是服务器需要恢复 TLS 会话。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。