首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FTPS使用指尖

FTPS使用指尖
EN

Stack Overflow用户
提问于 2017-09-21 09:16:14
回答 1查看 1.2K关注 0票数 3

我必须用SSL与FTP服务器通信。

我收到了一个关于如何使用(我相信)使用WinScp命令的示例:

代码语言:javascript
复制
open ftpes://SomeUser:SomePass@SomeDomain.com/ -certificate="xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"

问题是如何在应用程序中使用-certificate部件?我要把字符串保存在文件里还是.?

例如,如果我们使用C#的FtpWebRequest:

代码语言:javascript
复制
FtpWebRequest ftp = (FtpWebRequest)WebRequest.Create(downlaodLocation); 

我们怎么才能用这个指纹?

X509Certificate类有一个接受byte[]的构造函数。

代码语言:javascript
复制
byte[] toBytes = Encoding.ASCII.GetBytes("xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx");
ftp.ClientCertificates.Add(new X509Certificate(toBytes));

这是使用证书指纹的正确方式吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-12 18:03:02

最后,我采用了一种不同的方法来上传文件,并为此使用了WinScp作为c#库。

代码语言:javascript
复制
            SessionOptions sessionOptions = new SessionOptions
            {
                Protocol = Protocol.Sftp,
                HostName = ConfigurationManager.AppSettings["FTP.HOSTNAME"],
                UserName = ConfigurationManager.AppSettings["FTP.USERNAME"],
                Password = ConfigurationManager.AppSettings["FTP.PASSWORD"],
            };
            if (port.HasValue)
            {
                sessionOptions.PortNumber = port.Value;
            }

                sessionOptions.SshHostKeyFingerprint = ConfigurationManager.AppSettings["FTP.CERT.FINGERPRINT"].Trim();

            using (Session session = new Session())
            {
                if (!string.IsNullOrWhiteSpace(ConfigurationManager.AppSettings["LOG.PATH"]))
                {
                    session.SessionLogPath = ConfigurationManager.AppSettings["LOG.PATH"];
                }
                session.Open(sessionOptions);
                TransferOptions transferOptions = new TransferOptions
                {
                    TransferMode = TransferMode.Binary
                };

                TransferOperationResult transferResult = session.PutFiles(ConfigurationManager.AppSettings["FILE.TO.UPLOAD"], ConfigurationManager.AppSettings["FILE.DESTINATION.NAME"], true, transferOptions);

                transferResult.Check();

                StringBuilder result = new StringBuilder();
                foreach (TransferEventArgs transfer in transferResult.Transfers)
                {
                    result.Append(string.Format("Upload of {0} : {1}", transfer.FileName, transfer.Error));
                }
                Console.WriteLine(result.ToString());
            }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46339983

复制
相关文章

相似问题

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