构建一个小型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响应。这让我觉得我的数据频道没有加密?这是对的吗?