使用指纹的 FTPS
FTPS using fingerpring
我必须使用 SSL 与 FTP 服务器通信。
我收到了一个关于如何使用 WinScp 命令的示例:
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:
FtpWebRequest ftp = (FtpWebRequest)WebRequest.Create(downlaodLocation);
我们如何使用这个指纹?
X509Certificate class 有一个接受 byte[].
的构造函数
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));
这是使用证书指纹的正确方法吗?
最终我采用了不同的方法来上传文件,并为此使用了 WinScp for c# lib。
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());
}
我必须使用 SSL 与 FTP 服务器通信。
我收到了一个关于如何使用 WinScp 命令的示例:
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:
FtpWebRequest ftp = (FtpWebRequest)WebRequest.Create(downlaodLocation);
我们如何使用这个指纹?
X509Certificate class 有一个接受 byte[].
的构造函数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));
这是使用证书指纹的正确方法吗?
最终我采用了不同的方法来上传文件,并为此使用了 WinScp for c# lib。
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());
}