一尘不染

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

c#

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

谢谢


阅读 646

收藏
2020-05-19

共1个答案

一尘不染

据我所知,当前(.NET 2.0和3.5)的FtpWebRequest版本仅支持显式SSL。

实际上,.NET 2.0当前不支持隐式SSL,仅支持显式。我们将考虑在以后的版本中添加它。

JonCole- MSDN论坛上的
MSFTModerator

如果需要同时使用隐式和显式TLS / SSL,则必须尝试使用​​第三方FTP / SSL组件之一。以下代码使用了我们的Rebex FTP /
SSL
,摘自教程页

显式TLS / SSL

客户端以通常的非保护方式连接到FTP服务器,通常将端口21分配给FTP协议。当需要使用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保护

FTPS协议最初是由IANA分配的。连接到该端口后,将立即开始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/下载该组件。

2020-05-19