FluentFTP证书错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FluentFTP证书错误相关的知识,希望对你有一定的参考价值。

当我尝试连接到我的FTP服务器以使用FluentFTP上传文件时,我得到:

根据验证程序,远程证书无效。

然而Filezilla工作正常,没有错误或警告。

我做错了什么,如果它实际上是服务器的问题,我怎么能忽略这个错误

这是我的代码:

var credentials = new NetworkCredential(Username, Password);
FtpClient client = new FtpClient(Host, credentials)
{
    Port = Port,
    EncryptionMode = FtpEncryptionMode.Explicit
};
client.DataConnectionEncryption = true;

client.Connect();
var result = client.UploadFileAsync(FilePathName, RemotePathName, AllowOverwrite ? FtpExists.Overwrite : FtpExists.Skip, CreateRemoteDirectory, token).GetAwaiter().GetResult();
client.Disconnect();

我也尝试添加事件client.ValidateCertificate += Client_ValidateCertificate;

private static void Client_ValidateCertificate(FtpClient control, FtpSslValidationEventArgs e)
{
    e.PolicyErrors = SslPolicyErrors.None;
}

但我无法让它工作,我仍然得到同样的错误。

这是Filezilla的输出:

Status: Selected port usually in use by a different protocol.
Status: Resolving address of xxxxxxxxxxxxxxxxxxxxxx
Status: Connecting to xxx.xxx.xxx.xxx:xx...
Status: Connection established, waiting for welcome message...
Status: Initializing TLS...
Status: Verifying certificate...
Status: TLS connection established.
Status: Logged in
Status: Retrieving directory listing of "xxxxxxxxxxxxx"...
Status: Directory listing of "xxxxxxxxxxxxx" successful
答案

Client_ValidateCertificate需要手动接受这样的证书:

private static void Client_ValidateCertificate(FtpClient control, FtpSslValidationEventArgs e)
{
    e.Accept = true;
}

然而,盲目接受任何证书真的是一个坏主意。我最终做了这样的事情:

private void Client_ValidateCertificate(FtpClient control, FtpSslValidationEventArgs e)
{
    if (e.PolicyErrors == SslPolicyErrors.None || e.Certificate.GetRawCertDataString() == TrustedRawCertData)
    {
        e.Accept = true;
    }
    else
    {
        throw new Exception($"{e.PolicyErrors}{Environment.NewLine}{GetCertificateDetails(e.Certificate)}");
    }
}

以上是关于FluentFTP证书错误的主要内容,如果未能解决你的问题,请参考以下文章

c#使用FluentFtp实现一行代码实现ftp上传下载等

如何使用FluentFTP列出文件夹

使用 FluentFTP 从 FTP 并发下载多个文件,最大值

FluentFTP无法在SSIS中工作,无法加载FluentFTPDLL

使用 FluentFTP 下载文件

快速高效的C#FTP文件传输库FluentFTP