You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 02:24:31