Commons Net FTPSClient를 위한 SOCKS 경로
서버 호스트 이름, 수동 데이터 연결, TLS 검증을 유지하면서 FTPS에 Commons Net의 소켓 프록시 인터페이스를 사용합니다.
SOCKS 중계자가 있으면 Commons Net의 FTPSClient는 상속된 소켓 프록시 인터페이스를 사용할 수 있습니다. FTPS 서버를 연결 대상으로 유지하십시오:
var client = new org.apache.commons.net.ftp.FTPSClient(false);
client.setProxy(new java.net.Proxy(
java.net.Proxy.Type.SOCKS,
new java.net.InetSocketAddress("proxy.example", 1080)));
client.setTrustManager(null);
client.setEndpointCheckingEnabled(true);
client.setConnectTimeout(10000);
client.connect("ftps.example", 21);
이것은 명시적 FTPS 연결을 시작합니다. 애플리케이션은 여전히 로그인, 데이터 보호 협상, 전송 처리, 연결 해제를 담당합니다. null trust manager 설정은 Commons Net의 날짜만 기준으로 하는 인증서 검사 대신 JVM의 기본 trust manager를 선택합니다. 의도한 trust store와 서버 인증서의 호스트 이름을 사용하십시오.
수동 전송에서 현재 FTPSClient 구현은 데이터 소켓도 구성된 프록시를 통해 만들고 그다음 TLS 계층을 추가합니다. 로그인 후 수동 모드를 사용하고 일반 FTPS API를 통해 필요한 보호 데이터 채널을 협상하십시오. 제어 연결이 성공해도 그 작업이 완료되지는 않습니다. 수동 데이터 연결은 별도의 경로로 남습니다.
이 코드는 추가 계정이 없는 SOCKS 서비스를 가정합니다. 인증 지원은 선택한 Java 런타임과 배포에 대해 별도로 검토해야 합니다.
이것은 FTPHTTPClient의 HTTP CONNECT 인터페이스가 아닙니다. 그 형제는 일반 FTP를 HTTP 터널로 처리하며, 포트를 바꾼다고 FTPS가 추가되지는 않습니다. 네트워크가 HTTP 프록시만 허용한다면 제어 경로와 데이터 경로 모두에서 CONNECT를 지원하는 FTPS 구현이나 유지 관리되는 적응을 선택하십시오.
클라이언트 수명 주기 동안 프록시 구성을 유지하고, 재사용하는 인스턴스를 다시 연결하기 전에 검토하십시오. FTPS 연결 해제는 소켓 팩토리를 재설정합니다. 경로가 성공한 것처럼 보이도록 인증서 검사를 trust-all manager로 대체하지 마십시오.