我正在尝试在 Node 中编写一个 FTP 服务器,它支持具有显式 AUTH 的 TLS。在这种模式下,客户端向服务器发送一个 AUTH TLS
命令,服务器以确认响应,提示客户端开始协商安全连接。
我正在使用此代码升级连接:https://github.com/andris9/rai/blob/master/lib/starttls.js .我已经通过使用 net.Server 编写一个简单的回显服务器,然后使用 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 的了解还不够深入,无法进行进一步调查。我应该如何调查此错误的来源?
我正在运行 Node 0.8.1,并且与 0.6.19 有同样的问题。
最佳答案
这只是一个愚蠢的错误。我正在修改的 FTP 服务器代码使用了 socket.setEncoding
。当然,打开它会搞砸 TLS 协商。
关于node.js - 如何在 Node 中将套接字升级到 TLS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11399986/