我正在尝试在支持带有显式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有相同的问题。
错误清楚地表明客户端Hello中没有发送密码。您可以尝试使用ethreal将数据包解码为SSL,并尝试查看您发送的客户端Hello数据包中是否存在密码。 – Jay 2012-07-10 04:31:05
这很奇怪,因为我的程序是服务器,而不是客户端,而且我尝试过使用几个FTP客户端。似乎不太可能,他们都在这方面是越野车。 (除非TLS客户端/服务器术语与我期望的不同?)感谢您的空灵建议。 – foldl 2012-07-10 12:37:46
似乎FTP客户端正在发送正确的客户端Hello消息,但服务器从不以服务器Hello响应。所以在我的代码中肯定有一个bug。只是很难弄清楚,因为升级连接的代码已知可以工作。 – foldl 2012-07-10 13:07:05