我如何在节点中将套接字升级到TLS?

我试图写一个FTP服务器在支持TLS明确的AUTH的节点。 在这种模式下,客户端发送一个AUTH TLS命令给服务器,服务器响应一个确认,提示客户端开始协商安全连接。

我使用这个代码来升级连接: https : //github.com/andris9/rai/blob/master/lib/starttls.js 。 我已经通过使用net.Server编写了一个简单的echo服务器,然后使用starttls函数来立即将套接字升级到一个安全的连接来validation。 使用openssl s_client连接到此testing服务器按预期工作。

但是,当我尝试使用支持具有显式authentication的TLS的FTP客户端连接到我的testingFTP服务器时,以下exception由createSecurePair返回的对象引发:

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

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

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

结果这只是一个愚蠢的错误。 我正在修改的FTP服务器代码使用了socket.setEncoding 。 当然,有这个开启了TLS谈判。