通过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();
- }
- }
- }
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();
- }
- }
- }
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/ !
转载于:https://blog.51cto.com/ajiao13/1132563
通过FTP4J 实现 FTPS 连接相关推荐
- ftp连接中服务器位置,使用 FTP 连接到服务器
使用 FTP 连接到服务器 10/11/2017 本文内容 如果承载网站的服务器支持文件传输协议 (FTP),则可以使用 Microsoft Expression Web 中的 FTP 功能将网站发布 ...
- 服务器测试文件怎么创建,如何创建一个“FTPS”模拟服务器以单元测试Java中的文件传输...
我有一个创建FTPS连接的CreateFTPConnection类.使用此连接传输文件.这里是TransferFile类的代码如何创建一个"FTPS"模拟服务器以单元测试Java中 ...
- ftps(ftp+ssl)
简介: ftps是一种多传输协议,相当于加密版的FTP.当你在FTP服务器上收发文件的时候,你面临两个风险.第一个风险是在上载文件的时候为文件加密.第二个风险是,这些文件在你等待接收方下载的时候将停留 ...
- BizTalk Server 2010新功能介绍(四):基于安全连接的FTP适配器
BizTalk Server是微软构建业务流程和集成解决方案的首选服务器,BizTalk Server 2010是这个产品线的第7个主要版本,提供对Windows Server 2008 R2.SQL ...
- linux搭建ftps(vsftpd),java代码测试上传下载
一.服务器安装 操作系统Ubuntu:sudo apt-get install vsftpd操作系统Centos:sudo yum install -y vsftpd##创建ftps用户,设置默认目录 ...
- 站长管理服务器必读:Ftp、Ftps与Sftp三兄弟的不同与区别以及部署全指引
文章标题: 站长管理服务器必读:Ftp.Ftps与Sftp三兄弟的不同与区别以及部署全指引 关键字 : ftp,sftp,freesshd,ftps 文章分类: 教程 创建时间: 2020年3月23日 ...
- FTP、FTPS和SFTP的简介与区别
FTP.FTPS和SFTP简介 FTP FTP 即 文件传输协议(英语:File Transfer Protocol 的缩写)是一个用于计算机网络上在客户端和服务器之间进行文件传输的应用层协议.完整的 ...
- Docker上部署FTP服务器(基于stilliard/pure-ftpd)
Docker Pure-ftpd Server 参考来源:https://hub.docker.com/r/stilliard/pure-ftpd/ pure-ftpd源码:https: ...
- Beyond Compare 4.4.2.26348发布 附下载链接
Beyond Compare 4.4.2.26348发布 附下载链接 Beyond Compare 4 中的新功能 下载链接 BCompare-zh-4.4.2.26348官方原版-桌面系统文档类资源 ...
最新文章
- LeetCode实战:删除排序数组中的重复项
- 宝塔建站 mysql在哪_宝塔面板建站教程,越详细越好纯小白! - 搜外问答
- python实现微信自动发信息_Python实现智慧-定期向微信女友发送消息,python,智给,定时,发消息...
- 第二章 Linux系统安装 - VMware虚拟机安装、卸载与使用
- 使用Eclipse+PyDev创建Django项目一windows下
- NGUI_2.6.3_系列教程六(序列帧动画)
- 百度智呼吸 html5,手机百度 iBreath智呼吸
- Security+ 学习笔记9 软件开发周期
- 谈谈Ext JS组件之引子
- 基于Java的汽车租赁系统
- linux怎么使用西部数据,「轉」Linux下西部数据C1门解决方法
- WebGL 是什么?
- win10分屏快捷键无法使用_Win10分屏操作,再也不用来回切换视图了!
- PHPword 表格内换行处理
- 软件开发详细设计说明书(转载)
- 6D模型:超越PDCA
- 使用浏览器抓包获取API
- C语言-第30课 - 程序中的三国天下
- 配置基本的tabBar--底部导航配置属性
- 来电手机铃声捕获方法
热门文章
- DirectX11 With Windows SDK--24 Render-To-Texture(RTT)技术的应用
- 十二、dbms_logmnr(分析重做日志和归档日志)
- Android studio启动后卡在refreshing gradle project
- LeetCode-- Unique Binary Search Trees II
- XAF Study Recources
- C'mon C'mon-Von Bondies
- 探秘大型B2C网站如何实现高性能可伸缩架构技术
- 【JavaFx教程】第三部分:与用户的交互
- 九阴真经 第十五层--node.js 第1天
- OC-通知+Block