I'm trying to write an FTP server in Node which supports TLS with explicit AUTH. In this mode, the client sends an AUTH TLS
command to the server, which responds with an acknowledgement, prompting the client to begin negotiating a secure connection.
I'm using this code to upgrade the connection: https://github.com/andris9/rai/blob/master/lib/starttls.js . I've verified that this works by writing a simple echo server using net.Server, and then using the starttls
function to immediately upgrade the socket to a secure connection. Connecting to this test server using openssl s_client
works as expected.
However, when I try to connect to my test FTP server using an FTP client supporting TLS with explicit auth, the following exception is raised by the object returned by createSecurePair
:
[Error: 140735236446560:error:1408A0B7:SSL routines:SSL3_GET_CLIENT_HELLO:no ciphers
specified:../deps/openssl/openssl/ssl/s3_srvr.c:1009:
]
I have in fact specified ciphers (createSecurePair
is passed an options
dict with ciphers
set to 'RC4-SHA:AES128-SHA:AES256-SHA'). I've packet-sniffed the connection, and what seems to happen is that after the server responds to the client's AUTH TLS
command, there is a brief interchange between client and server which I assume is the (failed) TLS negotiation. But I don't really understand enough about TLS to investigate any further. How should I go about investigating the source of this error?
I am running node 0.8.1, and had the same issue with 0.6.19.
This turned out just to be a silly mistake. The FTP server code I was modifying used socket.setEncoding
. Of course, having this turned on screwed up the TLS negotiation.