FTPS AUTH TLS - 我需要在PASV之后重新进行身份验证吗?

时间:2016-04-27 14:55:43

标签: c# authentication encryption ftp tls1.2

构建一个小型FTPS客户端(使用TcpClient)以更好地了解FTP的工作原理(主要是学习体验)。

到目前为止,我可以在控制通道(端口21)上连接,发出AUTH TLS,获取在端口21上连接的TcpClient的SslStream,发出User / Pass命令并通过SslStream成功进行身份验证。

现在,当我通过FTP服务器PASV时,我打开一个带有该连接的新TcpClient,没问题。我的问题是(这)(这些):我如何获得新连接的SslStream?我是否需要重新验证SslStream?

现在我的代码只挂在AuthenticateAsClient上:

var sslStream = new SslStream(_tcpDataClient.GetStream(), true, OnCertificateValidation, null);
try
    {
        sslStream.AuthenticateAsClient(_ftpServer, null, System.Security.Authentication.SslProtocols.Ssl3 | System.Security.Authentication.SslProtocols.Tls, true);

我的控件TcpClient上的相同代码工作正常:

var sslStream = new SslStream(_tcpControlClient.GetStream(), true, OnCertificateValidation, null);
try
    {
        sslStream.AuthenticateAsClient(_ftpServer, null, System.Security.Authentication.SslProtocols.Ssl3 | System.Security.Authentication.SslProtocols.Tls, true);

现在,控制TcpClient在AUTH TLS命令发送到服务器后立即运行。我已经尝试在数据通道上发送AUTH TLS而没有运气。

希望有人能指出我正确的方向。谢谢!

修改

快速评论 - 如果我使用_tcpDataClient中的直接GetStream,我会在Control频道上获得250响应。这让我觉得我的数据频道没有加密?这是对的吗?

0 个答案:

没有答案