首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET FtpWebRequest是否同时支持隐式(FTPS)和显式(FTPES)?

.NET FtpWebRequest是否同时支持隐式(FTPS)和显式(FTPES)?
EN

Stack Overflow用户
提问于 2009-12-04 03:09:12
回答 6查看 56.7K关注 0票数 29

我被要求支持隐式和显式FTPS (也称为FTPES)。我们目前使用的是.NET FtpWebRequestFtpWebRequest是否支持这两种类型的FTPES,有什么区别?

谢谢

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 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协商,保护控制连接,并且保护所有后续通信。

代码语言:javascript
复制
// 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协议进行连接,并在以后保护连接。

代码语言:javascript
复制
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支持它以实现与旧服务器的互操作性,但强烈建议尽可能使用显式保护。

代码语言:javascript
复制
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/下载该组件

票数 17
EN

Stack Overflow用户

发布于 2010-02-20 16:05:51

我之前使用过Alex FTPS客户端。也许你应该看看http://ftps.codeplex.com/

票数 14
EN

Stack Overflow用户

发布于 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,这很简单:

代码语言:javascript
复制
// 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的作者)

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1842186

复制
相关文章

相似问题

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