어떻게 FTP 4 J 를 바탕 으로 FTPS 연결 과정 분석 을 실현 합 니까?

5711 단어 FTP4JFTPS잇닿다
FTPS:
암호 화 된 FTP 에 해당 하 는 다 중 전송 프로 토 콜FTP 서버 에서 파일 을 송 수신 할 때 두 가지 위험 에 직면 합 니 다.첫 번 째 위험 은 파일 을 업로드 할 때 파일 을 암호 화 하 는 것 이다.두 번 째 위험 은 이 파일 들 이 수신 자가 다운로드 하 기 를 기다 리 는 동안 FTP 서버 에 머 무 를 것 이다.이때 이 파일 들 의 안전 을 어떻게 보장 하 느 냐 하 는 것 이다.두 번 째 선택(SSL 을 지원 하 는 FTP 서버 만 들 기)은 호스트 가 FTPS 연결 을 사용 하여 이 파일 을 업로드 할 수 있 도록 합 니 다.이것 은 FTP 프로 토 콜 아래 에 있 는 SSL 계층 암호 화 제어 와 데이터 채널 을 사용 하 는 것 을 포함한다.FTPS 를 대체 하 는 프로 토 콜 은 보안 파일 전송 프로 토 콜(SFTP)이다.이 프로 토 콜 은 클 라 이언 트 에서 서버 로 의 FTP 연결 을 SSH 파일 전송 프로 토 콜 로 암호 화 합 니 다.
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
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기