gpt4 book ai didi

c# - 在 C#/Mono 中通过 TLS/SSL 通过 Ftp 上传

转载 作者:太空宇宙 更新时间:2023-11-03 15:00:54 25 4
gpt4 key购买 nike

目前我正在使用以下代码尝试通过 TLS/SSL 进行 Ftp(上传文件)。对于我正在进行的项目,我有义务/被迫使用用户名和密码组合检查 TLS/SSL。我也只能使用 C#/Mono 代码,所以大多数第三方解决方案都行不通。

// Setting up variables
FtpWebRequest ftpRequest;
FtpWebResponse ftpResponse = null;

// Configuring & creating the object
ftpRequest = (FtpWebRequest)FtpWebRequest.Create (ftpPath + "/" + remoteFile);
ftpRequest.Credentials = new NetworkCredential ("user", "pwd");
ftpRequest.EnableSsl = true;
ftpRequest.UseBinary = true;
ftpRequest.UsePassive = true;
ftpRequest.KeepAlive = false;
ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;

// Hooking up custom validation for certificates (currently this custom method returns "true" in all cases - so this is not a failure point to my knowledge)
ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertificate;
// Getting back the ServicePoint object
ServicePoint sp = ftpRequest.ServicePoint;

// Uploading logic
byte[] b = File.ReadAllBytes (localFile);
ftpRequest.ContentLength = b.Length;
using (Stream ftpStream = ftpRequest.GetRequestStream())
{
ftpStream.Write (b, 0, b.Length);
ftpStream.Close ();
ftpResponse = (FtpWebResponse)ftpRequest.GetResponse ();
}

代码(没有 TLS/SSL)完美运行(当然 .EnableSsl = false,我们通过关闭 TLS/SSL 的 FTP 服务器进行测试)。添加 TLS/SSL 时,我们永远不会超过 using (Stream ftpStream = ftpRequest.GetRequestStream()) 行。抛出以下错误:

System.Net.WebException: Kan geen verbinding met de externe server maken (translated: Unable to connect to the remote server)   
at System.Net.FtpWebRequest.CheckError()
at System.Net.FtpWebRequest.GetRequestStream()
at ProjectNameSpace.FtpLogic.FtpUploadFileMethod()

有没有我做错了什么,还有其他解决方案吗?

编辑 #1: 我确实取回了包含证书信息等的 ServicePoint 对象。代码还流畅地流经 ServerCertificateValidationCallback 方法,在所有情况下我都返回“true”。

编辑 #2: 我应该通过 FileZilla 客户端添加这一点,并且在 FileZilla 客户端中启用 TLS/SSL 安全连接设置后,我可以使用给定的用户/密码组合连接到服务器。所以我想情况并非如此。

谢谢,-Y

最佳答案

有同样的问题,偶然发现了这个问题。阅读 Andrew Savinykh 的评论后,我简单地添加了端口并且它起作用了。希望这对遇到此问题的其他人有所帮助。

举例说明:

ftpRequest = (FtpWebRequest)FtpWebRequest.Create (ftpPath + ":990" + "/" + remoteFile);

关于c# - 在 C#/Mono 中通过 TLS/SSL 通过 Ftp 上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22063053/

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