【问题标题】:Upload file to implicit FTPS server in C# with TLS session reuse使用 TLS 会话重用将文件上传到 C# 中的隐式 FTPS 服务器
【发布时间】:2020-05-14 03:45:16
【问题描述】:

我正在尝试使用 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;
    }
}

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

谢谢。

【问题讨论】:

    标签: c# .net ssl ftp ftps


    【解决方案1】:

    您可以使用WinSCP .NET assembly

    它支持隐式 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();
    }
    

    (我是 WinSCP 的作者)

    有关该问题的更多参考,另请参阅Can connect to FTP using FileZilla or WinSCP, but not with FtpWebRequest or FluentFTP

    【讨论】:

    • 谢谢你!您的 WinSCP 正在工作。它的文档也很棒!我对 c# 和 ftp 连接等很陌生,但我很容易理解。
    猜你喜欢
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2010-12-04
    • 2020-03-03
    相关资源
    最近更新 更多