首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用FluentFTP连接到FTPS (FTPS)

用FluentFTP连接到FTPS (FTPS)
EN

Stack Overflow用户
提问于 2017-02-09 07:39:40
回答 2查看 23.9K关注 0票数 9

我使用本地计算机中的IIS测试带有SSL连接的FTP。我正在使用FluentFTP库连接到FTP。我使用以下代码连接到服务器。

代码语言:javascript
复制
FtpClient conn = new FtpClient();
conn.Host = firewallSslDetails.Address;
conn.Credentials = new NetworkCredential(firewallSslDetails.UserName, firewallSslDetails.Password);
conn.SslProtocols = System.Security.Authentication.SslProtocols.Default;

X509Certificate2 cert = new X509Certificate2(@"C:\Users\BizTalk360\Desktop\FtpSites\ServerCert.cer");
conn.EncryptionMode = FtpEncryptionMode.Implicit;
conn.DataConnectionType = FtpDataConnectionType.AutoActive;
conn.DataConnectionEncryption = true;
conn.EnableThreadSafeDataConnections = false;
conn.ClientCertificates.Add(cert);
conn.ValidateCertificate += new FtpSslValidation(OnValidateCertificate);

conn.Connect();

服务器返回我时出现以下错误。

FluentFTP.FtpCommandException:策略需要SSL;Win32错误:访问被拒绝。;错误详细信息: SSL策略需要SSL作为控制通道。

对于通过FTP连接,上面的代码工作正常,对于FTP和SSL,它是不工作的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-09 08:22:54

由于您似乎要连接到默认端口21 (没有在任何地方指定显式端口),您需要使用“显式”模式:

代码语言:javascript
复制
conn.EncryptionMode = FtpEncryptionMode.Explicit;

如果服务器使用自签名证书,则可能需要以编程方式验证它.不要像@Ivan回答的那样盲目地接受任何证书。这是个安全漏洞。验证特定的证书,例如通过检查其指纹。

FtpWebRequest“根据验证过程远程证书无效”

票数 14
EN

Stack Overflow用户

发布于 2019-08-07 19:17:50

代码语言:javascript
复制
//try this , 

var cl = new FtpClient(Server, Port, User, Password);
            cl.EncryptionMode = FtpEncryptionMode.Implicit;
            cl.DataConnectionType = FtpDataConnectionType.AutoPassive;
            cl.DataConnectionEncryption = true;
            cl.SslProtocols = protocol;
            cl.ValidateCertificate += new FtpSslValidation(OnValidateCertificate);
            var cer = new X509Certificate2(certificate);
            cl.ClientCertificates.Add(cer);
 System.Net.ServicePointManager.ServerCertificateValidationCallback = ServerCertificateValidationCallback;
 client.Connect();


 void OnValidateCertificate(FtpClient control, FtpSslValidationEventArgs e)
        {
            // add logic to test if certificate is valid here
            e.Accept = true;
        }
        private  bool ServerCertificateValidationCallback(object sender,
                                                X509Certificate certificate,
                                                X509Chain chain,
                                                SslPolicyErrors sslPolicyErrors)
        {
            return true;
        } 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42130826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档