使用 TLS 会话重用将文件上传到 C# 中的隐式 FTPS 服务器

Raf*_*fal 4 .net c# ftp ssl ftps

我正在尝试通过协议 TLS 通过 ftps 将文件上传到 FileZilla 服务器。服务器上的端口 20 和 21 已关闭。我设法连接到服务器的唯一方法是使用 FluentFTP,但由于某些 FileZilla 服务器错误,我无法上传文件。

https://github.com/robinrodricks/FluentFTP/issues/335
https://forum.filezilla-project.org/viewtopic.php?t=51601

public static void UploadTest(
    string pathUploadFile, string addressIP, int port, string location,
    string userName, string password)
{
    FtpClient ftp;

    Console.WriteLine("Configuring FTP to Connect to {0}", addressIP);
    ftp = new FtpClient(addressIP, port, new NetworkCredential(userName, password));
    ftp.ConnectTimeout = 600000;
    ftp.ReadTimeout = 60000;
    ftp.EncryptionMode = FtpEncryptionMode.Implicit;
    ftp.SslProtocols = SslProtocols.Default | SslProtocols.Tls11 | SslProtocols.Tls12;
    ftp.ValidateCertificate += new FtpSslValidation(OnValidateCertificate);
    ftp.Connect();
    // upload a file
    ftp.UploadFile(pathUploadFile, location);

    Console.WriteLine("Connected to {0}", addressIP);
    ftp.Disconnect();

    void OnValidateCertificate(FtpClient control, FtpSslValidationEventArgs e)
    {
        // add logic to test if certificate is valid here
        e.Accept = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

有没有不违反安全级别的方法?如果没有,是否还有其他免费库支持使用 TLS/SSL 上传文件?我也试过这个,但没有用。
https://docs.microsoft.com/en-us/dotnet/api/system.net.ftpwebrequest.enablessl

谢谢。

Mar*_*ryl 8

您可以使用WinSCP .NET 程序集

它支持隐式 TLS(端口 990)。并且使用了 OpenSSL TLS 实现(不是 .NET Framework),所以应该没有 FluentFTP 的问题。它绝对适用于 FileZilla FTP 服务器,即使打开了会话恢复要求。

SessionOptions sessionOptions = new SessionOptions
{
    Protocol = Protocol.Ftp,
    HostName = "ftp.example.com",
    UserName = "username",
    Password = "password",
    FtpSecure = FtpSecure.Implicit,
    TlsHostCertificateFingerprint = "xx:xx:xx:...",
};

using (Session session = new Session())
{
    session.Open(sessionOptions);

    session.PutFiles(localPath, remotePath).Check();
}
Run Code Online (Sandbox Code Playgroud)

(我是 WinSCP 的作者)

有关该问题的更多参考,另请参阅可以使用 FileZilla 或 WinSCP 连接到 FTP,但不能使用 FtpWebRequest 或 FluentFTP

  • 谢啦!您的 WinSCP 正在运行。它的文档也很棒!我对 c# 和 ftp 连接等很陌生,但对我来说很容易理解。 (2认同)