You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

安卓设备无法连接树莓派vsftpd FTPS服务器问题排查

解决安卓FTPS连接兼容性问题:优先用显式模式

先给你个明确的结论:是的,你应该立刻尝试切换到显式FTPS(FTPES)模式,你遇到的所有问题几乎都和隐式模式的兼容性差有关,尤其是安卓客户端对这种老模式的支持很不友好。

为什么隐式模式会出这么多问题?

隐式FTPS(默认990端口)是比较老旧的标准,它要求连接建立后立即加密,没有协商过程。这就导致:

  • 安卓客户端的证书校验逻辑往往更严格,比如强制要求旧版SSL协议,但你的GreenLock(Let's Encrypt)证书是用现代TLS 1.2/1.3签发的,直接触发“证书版本错误”。
  • 客户端如果没正确触发加密就发指令,vsftpd会把明文当成加密数据解析,自然出现日志里的乱码指令,FileZilla的GnuTLS error -15本质也是加密握手时的协议不匹配。

而显式FTPS(默认21端口)是现在的主流:先建立明文连接,再通过AUTH TLS命令协商加密版本和证书,兼容性强太多,而且只要你的证书是受信任CA签发的(比如Let's Encrypt),安卓7.0+系统默认信任,完全不需要手动安装证书。

具体配置调整步骤

  1. 修改vsftpd配置文件(通常是/etc/vsftpd.conf):

    • 先注释掉隐式模式相关的配置:
      # implicit_ssl=YES
      # listen_port=990
      
    • 添加/修改显式FTPS的核心配置:
      ssl_enable=YES
      allow_anon_ssl=NO
      force_local_data_ssl=YES
      force_local_logins_ssl=YES
      # 启用现代TLS版本,禁用老旧SSL
      ssl_tlsv1_2=YES
      ssl_tlsv1_3=YES
      ssl_sslv2=NO
      ssl_sslv3=NO
      # 避免证书复用导致的握手错误
      require_ssl_reuse=NO
      # 使用高安全级别的加密套件
      ssl_ciphers=HIGH
      # 指定GreenLock证书路径(替换成你的域名)
      rsa_cert_file=/etc/letsencrypt/live/your-domain.com/fullchain.pem
      rsa_private_key_file=/etc/letsencrypt/live/your-domain.com/privkey.pem
      
    • 记得开启被动模式(安卓客户端几乎都需要):
      pasv_enable=YES
      pasv_min_port=40000
      pasv_max_port=50000
      pasv_address=your-domain.com  # 或者你的公网IP
      
  2. 重启vsftpd服务

    sudo systemctl restart vsftpd
    
  3. 安卓客户端连接设置

    • 选择连接模式为「FTPS(显式)」或「FTPES」,端口填21。
    • 关闭“仅使用旧版SSL”之类的选项,确保客户端允许TLS 1.2+。
    • 输入用户名密码后直接连接,不需要手动导入证书。

额外排查点

如果切换后还是有问题,去看vsftpd的日志(/var/log/vsftpd.log),里面会有加密握手的具体错误信息;另外要确保路由器/防火墙开放了21端口和被动模式的40000-50000端口。

内容的提问来源于stack exchange,提问作者Peter

火山引擎 最新活动