"OSError: [Errno 0] Error" in sslobj.do_handshake when listing a directory using ftplib on FTPS server
"OSError: [Errno 0] Error" in sslobj.do_handshake when listing a directory using ftplib on FTPS server
我想连接到包含一些不受信任证书的 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
异常:
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 类似,所以我也尝试使用其他一些上下文,例如:
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 会话恢复。
参见FTPS with Python ftplib - Session reuse required。
我想连接到包含一些不受信任证书的 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
异常:
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
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 会话恢复。
参见FTPS with Python ftplib - Session reuse required。