2

我正在尝试在 Node 中编写一个支持具有显式身份验证的 TLS 的 FTP 服务器。在这种模式下,客户端向服务器发送AUTH TLS命令,服务器以确认响应,提示客户端开始协商安全连接。

我正在使用此代码升级连接:https ://github.com/andris9/rai/blob/master/lib/starttls.js 。我通过使用 net.Server 编写一个简单的 echo 服务器,然后使用该starttls函数立即将套接字升级到安全连接来验证这是否有效。openssl s_client使用按预期连接到此测试服务器。

但是,当我尝试使用支持具有显式身份验证的 TLS 的 FTP 客户端连接到我的测试 FTP 服务器时,由返回的对象引发以下异常createSecurePair

[Error: 140735236446560:error:1408A0B7:SSL routines:SSL3_GET_CLIENT_HELLO:no ciphers     
 specified:../deps/openssl/openssl/ssl/s3_srvr.c:1009:
]

我实际上已经指定了密码(createSecurePair传递了一个设置为 'RC4-SHA:AES128-SHA:AES256-SHA'的options字典)。ciphers我已经对连接进行了数据包嗅探,似乎发生的情况是,在服务器响应客户端的AUTH TLS命令后,客户端和服务器之间进行了短暂的交换,我认为这是(失败的)TLS 协商。但我对 TLS 的了解还不够深入,无法进一步调查。我应该如何去调查这个错误的来源?

我正在运行节点 0.8.1,并且与 0.6.19 有相同的问题。

4

1 回答 1

3

事实证明这只是一个愚蠢的错误。我正在修改的 FTP 服务器代码使用socket.setEncoding. 当然,打开它会搞砸 TLS 协商。

于 2012-07-10T13:39:54.407 回答