gpt4 book ai didi

c# - 带有 EnableSSL 的 FtpWebRequest

转载 作者:太空狗 更新时间:2023-10-29 23:48:50 24 4
gpt4 key购买 nike

我实现了我的自定义 FTP 类以与我付费购买的托管服务器一起使用。我使用 FTP 备份、恢复和更新我的应用程序。我现在想要启用 ssl 以将其投入生产。我问过我的托管公司是否支持 ssl 协议(protocol),他们说支持。

所以我在 Microsoft MSDN 教程之后修改了我的方法,如下所示:

reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(m_ftpAddress.Trim()));
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(m_ftpUsername, m_ftpPassword);
reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;

ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(ValidateServerCertificate);
X509Certificate cert = new X509Certificate(path to a certificate created with makecert.exe);

reqFTP.ClientCertificates.Add(cert);
reqFTP.AuthenticationLevel = AuthenticationLevel.MutualAuthRequested;
reqFTP.ImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Identification;

reqFTP.EnableSsl = true;

现在,MSDN 表示,如果服务器支持 ssl 协议(protocol),则在使用 AUTH TLS 询问时不会抛出异常。这可以在跟踪日志中看到。所以我想这不是服务器问题。

在认证阶段之后,服务器返回一个

System.Net Information: 0 : [0216] FtpControlStream#41622463 - Received response [227 Entering Passive Mode (the IP and port number).]

触发错误的消息:

System.Net Error: 0 : [0216] Exception in the FtpWebRequest#12547953::GetResponse - The remote server returned an error: 227 Entering Passive Mode (the IP and port number).

我试过设置

reqFTP.UsePassive = true;

属性为 false 然后我得到这个错误:

System.Net Information: 0 : [2692] FtpControlStream#4878312 - Received response [500 Illegal PORT command]

当然,如果没有将 EnableSLL 属性设置为 true,则一切正常。

有没有人对此有任何想法?

编辑:我修改了代码作为休闲:

reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(m_ftpAddress.Trim()));
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(m_ftpUsername, m_ftpPassword);
reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;

ServicePointManager.ServerCertificateValidationCallback = new
System.Net.Security.RemoteCertificateValidationCallback(ValidateServerCertificate);

reqFTP.ClientCertificates.Add(cert);
reqFTP.AuthenticationLevel = AuthenticationLevel.MutualAuthRequested;
reqFTP.ImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Identification
reqFTP.EnableSsl = true;

ValidateServerCertificate 始终返回 true。这样修改后效果就没有了。

我不明白:

  • 此时应用程序正在使用服务器证书,对吗?
  • 在修改之前也使用我的吗?

有人可以解释一下这是如何工作的吗?

编辑:在与托管公司交换了许多电子邮件后,发现他们的 FTP 软件有问题,但代码没有问题。

最佳答案

您是否检查过您的主机使用的是 FTPS 还是 SFTP?

它们是不同的协议(protocol),您的主机可能认为您说的是错误的协议(protocol)。

关于c# - 带有 EnableSSL 的 FtpWebRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1608038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com