使用ftputil连接Pure-FTPd时遭遇DH_KEY_TOO_SMALL错误求助
解决ftputil连接Pure-FTPd时的DH_KEY_TOO_SMALL错误
问题出在你修改SSL上下文的时机太晚——之前的代码是在登录和启用数据连接TLS之后才设置加密套件,此时TLS连接已经建立,修改根本不会生效。必须在连接、登录操作之前配置好SSL上下文。
以下是两种可行的解决方案:
方案一:初始化时传入预配置的SSL上下文
import ftputil from ftplib import FTP_TLS import ssl class TLSFTPSession(FTP_TLS): def __init__(self, host, userid, password): # 创建SSL上下文并调整安全级别 context = ssl.create_default_context() context.set_ciphers('DEFAULT@SECLEVEL=1') # 传入自定义上下文初始化FTP_TLS super().__init__(context=context) self.set_debuglevel(2) self.connect(host, 21) self.login(userid, password) # 若需保护数据连接,取消下方注释 # self.prot_p() ftp = ftputil.FTPHost(host, user, pw, session_factory=TLSFTPSession)
方案二:初始化后立即修改上下文再执行连接
import ftputil from ftplib import FTP_TLS class TLSFTPSession(FTP_TLS): def __init__(self, host, userid, password): super().__init__() # 先调整SSL上下文,再进行后续操作 self.context.set_ciphers('DEFAULT@SECLEVEL=1') self.set_debuglevel(2) self.connect(host, 21) self.login(userid, password) # self.prot_p() ftp = ftputil.FTPHost(host, user, pw, session_factory=TLSFTPSession)
补充说明
- 若上述方案仍无效,可尝试指定具体加密套件,例如
'AES256-SHA@SECLEVEL=1'。 - 降低SSL安全级别只是临时解决方案,建议联系服务器管理员升级Pure-FTPd的DH密钥长度至至少2048位,从根源解决安全兼容性问题。
内容的提问来源于stack exchange,提问作者mrgou
相关产品推荐
相关产品推荐

