我被要求支持隐式和显式FTPS (也称为FTPES)。我们目前使用的是.NET FtpWebRequest。FtpWebRequest是否支持这两种类型的FTPES,有什么区别?
谢谢
发布于 2009-12-09 04:02:04
据我所知,当前版本的FtpWebRequest (SSL2.0和3.5)只支持显式.NET。
实际上,SSL2.0目前不支持隐式.NET,只支持显式。我们将考虑在将来的版本中添加此功能。
MSDN forum post上的JonCole - MSFTModerator
如果需要同时使用隐式和显式TLS/SSL,则必须尝试使用第三方FTP/SSL组件之一。下面的代码使用我们的Rebex FTP/SSL,取自tutorial page。
显式TLS/SSL
客户端以通常的无保护方式连接到FTP服务器,通常连接到分配给FTP协议的端口21。当需要使用SSL保护连接时,初始化SSL协商,保护控制连接,并且保护所有后续通信。
// Create an instance of the Ftp class.
Ftp ftp = new Ftp();
// Connect securely using explicit SSL.
// Use the third argument to specify additional SSL parameters.
ftp.Connect(hostname, 21, null, FtpSecurity.Explicit);
// Connection is protected now, we can log in safely.
ftp.Login(username, password);显式保护意味着可以随时保护连接的安全。如果您不知道在连接时是否需要保护,您可能希望使用普通的未加密FTP协议进行连接,并在以后保护连接。
Ftp ftp = new Ftp();
// Connect to the server with no protection.
ftp.Connect(hostname, 21);
// Upgrade connection to SSL.
// This method also accepts an argument to specify SSL parameters.
ftp.Secure();
// Connection is protected now, we can log in safely.
ftp.Login(username, password);会话的FTP隐式SSL保护
最初,IANA为FTPS协议分配了一个单独的端口。一旦连接到此端口,SSL协商就会立即开始,并且控制连接是安全的。所有数据连接也都以相同的方式进行隐式保护。这类似于HTTPS使用的方法。
此方法不受IETF的支持,已弃用。Rebex FTP/SSL支持它以实现与旧服务器的互操作性,但强烈建议尽可能使用显式保护。
Ftp ftp = new Ftp();
// Connect securely using implicit SSL.
// Use the third argument to specify additional SSL parameters.
ftp.Connect(hostname, 990, null, FtpSecurity.Implicit);
// Connection is protected now, we can log in safely.
ftp.Login(username, password);您可以在rebex.net/ftp-ssl.net/下载该组件
发布于 2010-02-20 16:05:51
我之前使用过Alex FTPS客户端。也许你应该看看http://ftps.codeplex.com/。
发布于 2017-06-26 17:31:10
.NET框架/FtpWebRequest仅支持explicit TLS/SSL encryption。它不支持隐式TLS/SSL加密。
我相信这不太可能。.NET框架的FTP实现只使用协议的标准化功能。隐式TLS/SSL加密从未标准化。它只是作为一种临时机制引入,以允许对不支持加密的FTP客户端使用无缝加密。一般来说,没有理由使用隐式TLS/SSL加密。仅支持隐式TLS/SSL加密的FTP服务器已损坏,imo。注意,RFC 2228 [FTP Security Extensions]是在20多年前引入的!
无论如何,如果你需要使用隐式的TLS/SSL加密,你必须使用第三方FTP库。
使用WinSCP .NET assembly,这很简单:
// Set up session options
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Ftp,
UserName = "username",
Password = "password",
FtpSecure = FtpSecure.Implicit,
};
using (Session session = new Session())
{
// Connect
session.Open(sessionOptions);
// Your code
}您可以使用WinSCP GUI generate a C# FTP code template,就像上面的那个一样。
(我是WinSCP的作者)
https://stackoverflow.com/questions/1842186
复制相似问题