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

时间:2012-07-09 17:22:12

标签: node.js ftp openssl ssl

我正在尝试在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有相同的问题。

1 个答案:

答案 0 :(得分:1)

这结果只是一个愚蠢的错误。我正在修改的FTP服务器代码使用socket.setEncoding。当然,启用此功能会搞砸TLS协商。