证书验证/安装的FTPS(SSL)?(Certificate validation/installa

2019-10-18 18:14发布

我使用FileZilla中的服务器和DNS服务,所以,我不会用我的本地计算机的IP(但我已经试过在以下两个方法)。

试图System.Net.FtpWebRequest工作后,我读过各地(包括这么几个职位),并发现该SSL支持不是很充足与该库。 它与常规的FTP工作,但是当我试图强迫SSL,我得到一个证书验证错误说: The remote certificate is invalid according to the validation procedure.

所以,我周围做了一些搜索和发现亚历克斯FTPS客户端库。 下面是我写了代码:

class FTPSWorker
    {
        public static void UploadFile(string sourceFile, string targetFile, string ftpIP, string ftpUser, string ftpPass)
        {
            try
            {
                using (FTPSClient client = new FTPSClient())
                {
                    client.Connect(ftpIP, new NetworkCredential(ftpUser, ftpPass),
                                   ESSLSupportMode.CredentialsRequired | ESSLSupportMode.DataChannelRequested);
                    client.SetTransferMode(ETransferMode.Binary);
                    client.PutFile(sourceFile, targetFile);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

不幸的是,我得到完全相同的证书错误。 我可以,但是,使用访问客户端的FileZilla FTP服务器完美的罚款。 所以,我想有必须是一个证书的问题。

我要指出,我的服务器是显示出下面的日志条目:

Welcome Message
AUTH TLS
234 Using authentication type TLS
SSL connection established
disconnected

虽然客户端(C#WPF应用程序)中得到这个错误:

The remote certificate is invalid according to the validation procedure.

这绝对是完全相同的错误,如果我使用.NET库和MSDN代码。

我做更多的研究,发现类似的解决方案对这些:

远程证书根据验证过程是无效的

“远程证书根据验证过程是无效的。” 使用Gmail的SMTP服务器

但他们只是看起来像冒险黑客攻击......虽然他们做的工作,是有办法有认证信息的出现,也许有用户进行验证/安装它除了它目前使用的基本是/否?

我的代码现在(我抛弃了亚历克斯的图书馆,又回到默认.NET):

ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(FTPWorker.ValidateServerCertificate);

public class FTPWorker
{
    public static void UploadFile(string sourceFile, string targetFile, string ftpIP, string ftpUser, string ftpPass)
    {
        try
        {
            string filename = "ftp://" + ftpIP + "/test/" + targetFile;
            FtpWebRequest ftpReq = (FtpWebRequest)WebRequest.Create(filename);
            ftpReq.Method = WebRequestMethods.Ftp.UploadFile;
            ftpReq.Credentials = new NetworkCredential(ftpUser, ftpPass);
            ftpReq.UsePassive = true;
            ftpReq.EnableSsl = true;
            ftpReq.UseBinary = true;
            ftpReq.KeepAlive = false;

            byte[] b = File.ReadAllBytes(sourceFile);

            ftpReq.ContentLength = b.Length;

            using (Stream s = ftpReq.GetRequestStream())
            {
                s.Write(b, 0, b.Length);
            }

            FtpWebResponse ftpResp = (FtpWebResponse)ftpReq.GetResponse();

            if (ftpResp != null)
            {
                MessageBox.Show(ftpResp.StatusDescription);
            }
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
        }
    }

    public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
    {
        if (sslPolicyErrors == SslPolicyErrors.None)
            return true;
        else
        {
            if (System.Windows.Forms.MessageBox.Show("The server certificate is not valid.\nAccept?", 
                   "Certificate Validation", System.Windows.Forms.MessageBoxButtons.YesNo,
                   System.Windows.Forms.MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                return true;
            else
                return false;
        }
    }
}

Answer 1:

因此,对于任何人有同样的问题,我最终只给用户一个警告有关证书,并接受或基于我在原来的职位提供的链接拒绝的选项。 为了使证书进行验证,它必须是真实的,不是一个本地创建一个。 所以,这是唯一的解决方法有现在。



Answer 2:

如果指定它的亚历克斯FTPS会做同样的证书验证。 在您的client.connect添加remotecertificatevalidationcallback接受证书

client.Connect(ftpIP, new NetworkCredential(ftpUser, ftpPass),
                               ESSLSupportMode.CredentialsRequired | ESSLSupportMode.DataChannelRequested, 
                           new RemoteCertificateValidationCallback(ValidateTestServerCertificate));

然后在下面。

private static bool ValidateTestServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
    {
        // Accept any certificate
        return true;
    }

我想使用默认的.NET。 但我坚持连接到目前正使用隐式的服务器。 :(



文章来源: Certificate validation/installation for FTPS (SSL)?