`
cuisuqiang
  • 浏览: 3962682 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
3feb66c0-2fb6-35ff-968a-5f5ec10ada43
Java研发技术指南
浏览量:3672062
社区版块
存档分类
最新评论

通过FTP4J 实现 FTPS 连接

阅读更多

FTPS:

一种多传输协议,相当于加密版的FTP。当你在FTP服务器上收发文件的时候,你面临两个风险。第一个风险是在上载文件的时候为文件加密。第二个风险是,这些文件在你等待接收方下载的时候将停留在FTP服务器上,这时你如何保证这些文件的安全。你的第二个选择(创建一个支持SSL的FTP服务器)能够让你的主机使用一个FTPS连接上载这些文件。这包括使用一个在FTP协议下面的SSL层加密控制和数据通道。一种替代FTPS的协议是安全文件传输协议(SFTP)。这个协议使用SSH文件传输协议加密从客户机到服务器的FTP连接。
FTPS是在安全套接层使用标准的FTP协议和指令的一种增强型FTP协议,为FTP协议和数据通道增加了SSL安全功能。FTPS也称作“FTP-SSL”和“FTP-over-SSL”。SSL是一个在客户机和具有SSL功能的服务器之间的安全连接中对数据进行加密和解密的协议。

 

当使用FTPS与服务器连接时,有两种方法:显式和隐式。
简单来说:
显示又叫FTPES, FTPS客户端跟FTPS服务器必须显式使用一种同样的加密方法。如果客户端不要求加密,服务器也允许非加密通讯。
隐式 就是客户端直接通过TSL/SSL加密与服务器联系,如果服务器无响应,则停止通讯。

 

FTP4J 支持 FTPS/FTPES secured connection,其中使用FTPES还是原来的21端口,使用FTPS使用的是990端口,使用SFTP的是22端口,以下说的不包含SFTP内容。

可以查看Serv-U域详细信息查看服务邦定的端口,默认情况下是以下内容:

 

 如果我们使用flashfxp进行连接,则使用不同连接方式时要进行选择,普通FTP连接使用21端口,不用选择:

 

 我们通过21端口进行显示FTPS连接

package test;
import it.sauronsoftware.ftp4j.FTPClient;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
/**
 * 通过21端口进行显示FTPS连接
 * @说明 
 * @author cuisuqiang
 * @version 1.0
 * @since
 */
public class Ftp4jTest {
	public static void main(String[] args) {
		try {
			TrustManager[] trustManager = new TrustManager[] { new X509TrustManager() {
				public X509Certificate[] getAcceptedIssuers() {
					return null;
				}
				public void checkClientTrusted(X509Certificate[] certs,
						String authType) {
				}
				public void checkServerTrusted(X509Certificate[] certs,
						String authType) {
				}
			} };
			SSLContext sslContext = null;
			sslContext = SSLContext.getInstance("SSL");
			sslContext.init(null, trustManager, new SecureRandom());
			SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
			FTPClient client = new FTPClient();
			client.setSSLSocketFactory(sslSocketFactory);
			client.setSecurity(FTPClient.SECURITY_FTPES); 
			client.connect("192.168.1.122", 21);
			client.login("123", "123123");
			System.out.println(client.toString());
			System.out.println(client.currentDirectory());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

代码会打印连接信息和当前目录

使用990端口进行隐式FTPS连接

package test;
import it.sauronsoftware.ftp4j.FTPClient;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
/**
 * 进行隐式FTPS连接
 * @说明 
 * @author cuisuqiang
 * @version 1.0
 * @since
 */
public class Ftp4jTest {
	public static void main(String[] args) {
		try {
			TrustManager[] trustManager = new TrustManager[] { new X509TrustManager() {
				public X509Certificate[] getAcceptedIssuers() {
					return null;
				}
				public void checkClientTrusted(X509Certificate[] certs,
						String authType) {
				}
				public void checkServerTrusted(X509Certificate[] certs,
						String authType) {
				}
			} };
			SSLContext sslContext = null;
			sslContext = SSLContext.getInstance("SSL");
			sslContext.init(null, trustManager, new SecureRandom());
			SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
			FTPClient client = new FTPClient();
			client.setSSLSocketFactory(sslSocketFactory);
			client.setSecurity(FTPClient.SECURITY_FTPS);
			client.connect("192.168.1.122", 990);
			client.login("123", "123123");
			System.out.println(client.toString());
			System.out.println(client.currentDirectory());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

打印内容相同

 

进行显示还是隐式连接的最大不同是指定了连接方式:

这个情况官方也给出了详细的说明:

The ftp4j library supports both FTPS (FTP over implicit TLS/SSL) and FTPES (FTP over explicit TLS/SSL).
The setSecurity() method can be used to turn on the feature:
client.setSecurity(FTPClient.SECURITY_FTPS); // enables FTPS
client.setSecurity(FTPClient.SECURITY_FTPES); // enables FTPES
Both methods must be called before connecting the remote server.
If the security is set to SECURITY_FTPS, the default port used by the connect() method changes to 990

 

请您到ITEYE网站看原创,谢谢!

http://cuisuqiang.iteye.com/ ! 

自建博客地址:http://www.javacui.com/ ,内容与ITEYE同步!

1
0
分享到:
评论
2 楼 idlqy 2015-05-22  
博主,我按照你得方法能够连上也能获取到当前路径。但是上传文件的时候报错:it.sauronsoftware.ftp4j.FTPException [code=522, message= SSL connection failed; session reuse required: see require_ssl_reuse option in vsftpd.conf man page]

博主遇到过吗?怎么解决的?或者能给一个ftps上传文件的demo给我看看吗?

另外说一下,我试在Android上用的ftp4j。

谢谢。
1 楼 yko2008 2013-01-25  
有些FTPS还需要带证书验证。

相关推荐

    利用ftp4j实现ftps加密上传

    在Java开发中,我们可以借助第三方库如ftp4j来实现FTPS的加密上传功能。 ftp4j是一个轻量级、功能强大的Java FTP客户端库,支持FTP和FTPS协议。它提供了丰富的API,使开发者可以方便地执行各种FTP操作,如连接...

    javaftp4j实现ftps加密上传

    总的来说,Java通过ftp4j库实现实现FTPS加密上传,涉及网络通信、安全协议、文件操作等多个方面,需要综合运用编程技能和网络知识。在具体实践中,要确保代码的健壮性和安全性,同时考虑性能和用户体验。

    ftp4j-一个开源的支持代理的FTP组件

    (不过如果你需要FTPS及SFTP,那ftp4j不支持) jar包只有50多k,地址在这里:ftp4j 使用代理的代码: import java.util.ArrayList; import it.sauronsoftware.ftp4j.FTPClient; import it.sauronsoftware.ftp4j....

    ftp4j 1.3源码

    通过研究ftp4j的源码,开发者不仅可以了解FTP/FTPS协议的工作原理,还能学习到如何优雅地设计和实现网络通信库。此外,对于需要自定义FTP客户端功能或优化性能的应用来说,深入理解ftp4j的实现细节至关重要。 总的...

    ftp4j-1.7.2.jar

    FTP4J还提供了其他高级特性,如断点续传、多线程下载、文件列表和目录遍历、FTP服务器的被动模式设置以及支持FTPES(FTP over SSL)和FTPS(FTP over TLS)。这些功能使得FTP4J成为Java开发人员处理FTP任务的强大...

    Ftps,SSL的基本用法

    FTP(File Transfer ...总的来说,FTPS和SSL是提升FTP连接安全性的关键手段,而ftp4j为Java开发者提供了便利的FTP/FTPS操作接口。通过学习和理解这些基本概念和技术,我们可以更好地保护文件传输过程中的数据安全。

    SwiFTP、FTP4J以及Demo下载

    FTP4J则是一个强大的FTP客户端库,它允许开发者在Java程序中实现完整的FTP功能,包括连接到FTP服务器、上传、下载文件、创建和删除目录等。FTP4J支持主动和被动模式,以及FTP和FTPS(FTP over SSL/TLS)协议,确保了...

    ftp客户端(ftp4j修改版)

    此外,ftp4j还支持FTP over SSL/TLS(FTPS)和SFTP(SSH File Transfer Protocol),确保数据传输的安全性。 在Android平台上使用ftp4j可能会遇到一些挑战。Android系统对内存管理和后台服务有严格的限制,这可能...

    ftp4j 上传 下载

    - FTP4J支持断点续传,可以通过`resumeTransfer()`和`suspendTransfer()`方法来实现。这在大文件传输中断后继续传输时非常有用。 6. 错误处理和连接管理: - FTP4J的`FtpException`类表示FTP操作过程中可能遇到的...

    commons-net-3.0.1.jar ftp4j

    Ftp4j还支持FTPS(FTP over TLS/SSL)和SFTP(Secure File Transfer Protocol,但不同于SSH的SFTP)协议,确保了数据传输的安全性。 在使用这两个库进行FTP操作时,首先需要在项目中引入对应的jar包。对于Maven项目...

    j-ftp实现ftp

    在这个场景中,我们关注的是一个名为“j-ftp”的Java应用程序,它实现了FTP功能,允许用户进行文件的上传和下载操作。这个程序是基于AWT(Abstract Window Toolkit)库构建的,AWT是Java提供的原始图形用户界面(GUI...

    android ftp4j上传下载带进度条

    总的来说,通过FTP4J库,开发者可以在Android应用中实现FTP文件上传和下载,并通过监听数据传输事件更新进度条,为用户提供更好的交互体验。在实际项目中,还需考虑错误处理、安全连接(如使用FTPS或SFTP)以及优化...

    Java常用FTP文件操作说明Apache.FTPClient,ftp4j,jftp

    ftp4j是一个简单易用且功能强大的FTP客户端库,支持FTP、FTPS以及SFTP协议。相较于Apache.FTPClient,ftp4j提供了更为简洁的API接口,适合快速开发场景。 ##### 基本使用 ```java import ...

    基于Java的FTP客户端Java类库 ftp4j.zip

    8. **易用性**:ftp4j的API设计简洁直观,使得开发者能够快速上手,通过几行代码就能实现复杂的FTP操作。 在实际应用中,你可以这样使用ftp4j: ```java FtpClient client = new FtpClient(); client.connect("ftp...

    Java常用FTP文件操作说明Apache.FTPClient,ftp4j,jftp.pdf

    在Java中,进行FTP(File Transfer Protocol)文件操作时,通常会使用第三方库,如Apache的FTPClient、ftp4j和jftp等。本文将主要讲解如何使用Apache的FTPClient库进行FTP文件操作。 Apache.FTPClient是一个功能...

    android FTPsever 显示已连接的客户端 及客户端下载进度

    1. **FTP服务器库**:Android开发中常用的FTP服务器库有`Apache MINA`、`FTP4j`或`NanoFTPd`。这些库提供了FTP服务的基础框架,允许开发者快速搭建FTP服务器。 2. **服务器初始化与配置**:首先,需要在Android应用...

    java 实现ftp上传下载

    本文将深入探讨如何使用Java实现FTP的上传和下载功能,以及如何处理多个FTP连接进行互传。 首先,我们需要了解Java中的`java.net`和`org.apache.commons.net.ftp`这两个库。`java.net`是Java标准库的一部分,提供了...

    j-ftp-1.50.tar.gz

    1. **连接管理**:提供了一套完整的连接API,支持FTP和FTPS(FTP over SSL/TLS)两种模式,确保数据传输的安全性。 2. **身份验证**:支持匿名登录以及用户名/密码认证,符合FTP的基本安全需求。 3. **文件传输**...

    java实现FTP服务器

    通过以上知识点,我们可以构建一个基础的FTP客户端,实现连接FTP服务器、登录、改变工作目录、上传和下载文件等功能。对于FTP服务器的实现,通常需要实现FTP服务器端的逻辑,这涉及更多的服务器管理、多线程处理、...

Global site tag (gtag.js) - Google Analytics