2012-07-09 25 views
2

我正在尝试在支持带有显式AUTH的TLS的Node中编写一个FTP服务器。在这种模式下,客户端向服务器发送一个AUTH TLS命令,服务器响应确认,提示客户端开始协商安全连接。如何将套接字升级到节点中的TLS?

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

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

我实际上已经指明:

然而,当我尝试连接到使用FTP客户端支持TLS使用显式身份验证我的测试FTP服务器,以下异常是由createSecurePair返回的对象募集密码(createSecurePair通过options字典,ciphers设置为'RC4-SHA:AES128-SHA:AES256-SHA')。我已经通过数据包嗅探了连接,而且似乎发生的情况是服务器响应客户端的AUTH TLS命令后,客户端和服务器之间有一个简短的交换,我认为这是(失败的)TLS协商。但我对TLS进一步调查并不十分了解。我应该如何去调查这个错误的来源?

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

+1

错误清楚地表明客户端Hello中没有发送密码。您可以尝试使用ethreal将数据包解码为SSL,并尝试查看您发送的客户端Hello数据包中是否存在密码。 – Jay 2012-07-10 04:31:05

+0

这很奇怪,因为我的程序是服务器,而不是客户端,而且我尝试过使用几个FTP客户端。似乎不太可能,他们都在这方面是越野车。 (除非TLS客户端/服务器术语与我期望的不同?)感谢您的空灵建议。 – foldl 2012-07-10 12:37:46

+0

似乎FTP客户端正在发送正确的客户端Hello消息,但服务器从不以服务器Hello响应。所以在我的代码中肯定有一个bug。只是很难弄清楚,因为升级连接的代码已知可以工作。 – foldl 2012-07-10 13:07:05

回答

1

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