我正在尝试在Node中编写一个支持带有显式AUTH的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
传递options
dict,ciphers
设置为'RC4-SHA:AES128-SHA:AES256-SHA')。我已经通过数据包嗅探了连接,似乎发生的事情是服务器响应客户端的AUTH TLS
命令之后,客户端和服务器之间有一个简短的交换,我认为是(失败的)TLS协商。但我对TLS的理解还不够深入。我该如何调查此错误的来源?
我正在运行节点0.8.1,与0.6.19有相同的问题。
答案 0 :(得分:1)
这结果只是一个愚蠢的错误。我正在修改的FTP服务器代码使用socket.setEncoding
。当然,启用此功能会搞砸TLS协商。