【问题标题】:FTPS problem: "A TLS packet with unexpected length was received."FTPS 问题:“收到了意外长度的 TLS 数据包。”
【发布时间】:2010-07-27 15:50:35
【问题描述】:

我正在尝试连接到 FTPS 服务器(不是 SFTP)。我是从 linux 系统连接的,所以我尝试了 lftp、ftp-ssl,甚至使用了 php 的 ftp_ssl_connect,但它们都不起作用。 (我已经能够使用上述全部或至少部分方法连接到其他 FTPS 服务器)。

我遇到的最具描述性的错误是从 lftp 一直调试到 11:

$ lftp
lftp :~> open -u my-username ftps://server.net
密码:
lftp my-username@server.net:~> debug 99999999999
lftp my-username@server.net:~> ls
FileCopy(0x717bf0) 进入初始状态
FileCopy(0x717bf0) 进入状态 DO_COPY
---- dns缓存命中
---- 连接到 server.net (IP ADDRESS) 端口 990
GNUTLS:HSK[acfbb0]:保存密码套件:DHE_RSA_AES_128_CBC_SHA1
GNUTLS:HSK[acfbb0]:保存密码套件:DHE_RSA_CAMELLIA_128_CBC_SHA1
GNUTLS:HSK[acfbb0]:保存密码套件:DHE_RSA_AES_256_CBC_SHA1
GNUTLS:HSK[acfbb0]:保存密码套件:DHE_RSA_CAMELLIA_256_CBC_SHA1
GNUTLS:HSK[acfbb0]:保存密码套件:DHE_RSA_3DES_EDE_CBC_SHA1
GNUTLS:HSK[acfbb0]:保存密码套件:DHE_DSS_AES_128_CBC_SHA1
GNUTLS:HSK[acfbb0]:保存密码套件:DHE_DSS_CAMELLIA_128_CBC_SHA1
GNUTLS:HSK[acfbb0]:保存密码套件:DHE_DSS_AES_256_CBC_SHA1
GNUTLS:HSK[acfbb0]:保存密码套件:DHE_DSS_CAMELLIA_256_CBC_SHA1
GNUTLS:HSK[acfbb0]:保存密码套件:DHE_DSS_3DES_EDE_CBC_SHA1
GNUTLS:HSK[acfbb0]:保存密码套件:DHE_DSS_ARCFOUR_SHA1
GNUTLS:HSK[acfbb0]:删除密码套件:DHE_PSK_SHA_AES_128_CBC_SHA1
GNUTLS:HSK[acfbb0]:删除密码套件:DHE_PSK_SHA_AES_256_CBC_SHA1
GNUTLS:HSK[acfbb0]:删除密码套件:DHE_PSK_SHA_3DES_EDE_CBC_SHA1
GNUTLS:HSK[acfbb0]:删除密码套件:DHE_PSK_SHA_ARCFOUR_SHA1
GNUTLS:HSK[acfbb0]:删除密码套件:SRP_SHA_RSA_AES_128_CBC_SHA1
GNUTLS:HSK[acfbb0]:删除密码套件:SRP_SHA_RSA_AES_256_CBC_SHA1
GNUTLS:HSK[acfbb0]:删除密码套件:SRP_SHA_RSA_3DES_EDE_CBC_SHA1
GNUTLS:HSK[acfbb0]:删除密码套件:SRP_SHA_DSS_AES_128_CBC_SHA1
GNUTLS:HSK[acfbb0]:删除密码套件:SRP_SHA_DSS_AES_256_CBC_SHA1
GNUTLS:HSK[acfbb0]:删除密码套件:SRP_SHA_DSS_3DES_EDE_CBC_SHA1
GNUTLS:HSK[acfbb0]:保存密码套件:RSA_AES_128_CBC_SHA1
GNUTLS:HSK[acfbb0]:保存密码套件:RSA_CAMELLIA_128_CBC_SHA1
GNUTLS:HSK[acfbb0]:保存密码套件:RSA_AES_256_CBC_SHA1
GNUTLS:HSK[acfbb0]:保存密码套件:RSA_CAMELLIA_256_CBC_SHA1
GNUTLS:HSK[acfbb0]:保存密码套件:RSA_3DES_EDE_CBC_SHA1
GNUTLS:HSK[acfbb0]:保存密码套件:RSA_ARCFOUR_SHA1
GNUTLS:HSK[acfbb0]:保存密码套件:RSA_ARCFOUR_MD5
GNUTLS:HSK[acfbb0]:删除密码套件:PSK_SHA_AES_128_CBC_SHA1
GNUTLS:HSK[acfbb0]:删除密码套件:PSK_SHA_AES_256_CBC_SHA1
GNUTLS:HSK[acfbb0]:删除密码套件:PSK_SHA_3DES_EDE_CBC_SHA1
GNUTLS:HSK[acfbb0]:删除密码套件:PSK_SHA_ARCFOUR_SHA1
GNUTLS:HSK[acfbb0]:删除密码套件:SRP_SHA_AES_128_CBC_SHA1
GNUTLS:HSK[acfbb0]:删除密码套件:SRP_SHA_AES_256_CBC_SHA1
GNUTLS:HSK[acfbb0]:删除密码套件:SRP_SHA_3DES_EDE_CBC_SHA1
GNUTLS:EXT[acfbb0]:发送扩展 CERT_TYPE
GNUTLS: HSK[acfbb0]: CLIENT HELLO 已发送 [88 字节]
GNUTLS:REC[acfbb0]:发送数据包[0]握手(22),长度:88
GNUTLS:断言:gnutls_cipher.c:205
GNUTLS:REC[acfbb0]:发送数据包[1]握手(22),长度:93
GNUTLS:断言:gnutls_buffers.c:638
GNUTLS:断言:gnutls_record.c:909
GNUTLS:断言:gnutls_buffers.c:1152
GNUTLS:断言:gnutls_handshake.c:1032
GNUTLS:断言:gnutls_handshake.c:2331
**** gnutls_handshake:收到了一个长度意外的 TLS 数据包。
---- 关闭控制插座
ls: 致命错误:gnutls_handshake: 收到了一个长度意外的 TLS 数据包。

使用 PHP 我得到以下结果:

警告:ftp_login(): SSL/TLS 握手在第 7 行的 /home/user/ftp.php 中失败
警告:ftp_login(): SSL enabled 在第 7 行的 /home/user/ftp.php 中启动协商
无法登录

第 6 行:$connect = ftp_ssl_connect("server.net") or die("cannot connect");

第 7 行:$result = ftp_login($connect,"my-username","my-password") or die("cannot login");

使用 ftp-ssl:

$ ftp-ssl -d -z debug server.net
SSL_DEBUG_FLAG 开启
连接到 server.net。
220-安全通知
220-可以监控所有活动。系统使用表示同意
220监控。信息可能会提供给执法部门。
ftp: setsockopt: 错误的文件描述符
名称(server.net:user):我的用户名
---> 认证 SSL
234 SSL enabled 开始协商
写入 0x68c190 (102 字节 => 102 (66))
0000 - 80 64 01 03 01 00 4b 00-00 00 10 00 00 39 00 00 .d........K......9..
0010 - 38 00 00 35 00 00 16 00-00 13 00 00 0a 07 00 c0 8..5............
0020 - 00 00 33 00 00 32 00 00-2f 03 00 80 00 00 05 00 ..3..2../........
0030 - 00 04 01 00 80 00 00 15-00 00 12 00 00 09 06 00 ......
0040 - 40 00 00 14 00 00 11 00-00 08 00 00 06 04 00 80 @................
0050 - 00 00 03 02 00 80 e9 28-25 ed ea 2d e4 d2 f2 25 ........(%..-...%
0060 - 80 e1 2e f1 c3 71 .....q
从 0x68c190 读取(7 个字节 => -1 (FFFFFFFFFFFFFFFF))
ftp: SSL_connect 错误错误:00000000:lib(0):func(0):reason(0)
: 对等方重置连接

对不起,如果这篇文章很长,但我已经在谷歌上搜索了好几天没有看到任何答案。只是希望我错过的一些调试信息对某人有用。

【问题讨论】:

    标签: php ftps


    【解决方案1】:

    在 debian 上遇到同样的错误:

    ---- Closing control socket
    ls: Fatal error: gnutls_handshake: An unexpected TLS packet was received.
    

    首先我必须在 debian 上升级 ssl-cert 包:

    $ sudo apt-get upgrade ssl-cert
    

    那我只好用 open ftp:// not open ftps://:

    lftp :~> open ftp://xxx.xxx.xxx.xxx:21
    ltfp :~> user foo bar
    

    然后错误变为:

    lftp foo@xxx.xxx.xxx.xxxx:~> ls
    
    ls: Fatal error: Certificate verification: Not trusted (XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX)
    

    此选项消除了错误并允许访问:

    lftp foo@xxx.xxx.xxx.xxxx:~> set ssl:verify-certificate no
    

    【讨论】:

      【解决方案2】:

      看起来服务器使用了不兼容或无效的密钥交换算法。 尝试使用 Wireshark 来捕获客户端和服务器之间的数据包,这可能会对问题有所了解。 此外,您可以尝试启用/禁用一些密钥交换算法。

      【讨论】:

      • 看来他们有防火墙规则限制数据套接字打开,并且他们没有启用被动模式连接。太令人沮丧了。现在可以使用,但非常感谢您的回答。
      • 有时端口 21 被过滤为仅允许某些 ISP 使用纯文本,从而导致此类错误。将 ftp 移至其他端口会有所帮助。
      猜你喜欢
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-07
      • 1970-01-01
      • 2019-11-02
      • 2011-01-16
      相关资源
      最近更新 更多