Một tuyến SOCKS cho FTPSClient của Commons Net
Dùng giao diện socket proxy của Commons Net cho FTPS trong khi giữ nguyên tên máy chủ của máy chủ, các kết nối dữ liệu thụ động và việc xác minh TLS.
Khi có một trung gian SOCKS, FTPSClient của Commons Net có thể dùng giao diện socket proxy kế thừa. Giữ máy chủ FTPS làm đích của kết nối:
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);
Điều này khởi tạo một kết nối FTPS tường minh. Ứng dụng vẫn chịu trách nhiệm đăng nhập, thương lượng bảo vệ dữ liệu, xử lý truyền tải và ngắt kết nối. Thiết lập null trust manager chọn các trust manager mặc định của JVM thay vì kiểm tra chứng chỉ chỉ theo ngày của Commons Net. Hãy dùng trust store dự định và tên máy chủ của chứng chỉ máy chủ.
Với truyền tải thụ động, cách triển khai FTPSClient hiện tại cũng tạo socket dữ liệu qua proxy đã cấu hình, rồi thêm lớp TLS. Sau khi đăng nhập, dùng chế độ thụ động và thương lượng kênh dữ liệu được bảo vệ cần thiết qua API FTPS thông thường. Một kết nối điều khiển thành công không hoàn tất công việc đó; kết nối dữ liệu thụ động vẫn là một đường riêng.
Mã giả định một dịch vụ SOCKS không có tài khoản bổ sung. Hỗ trợ xác thực cần được xem xét riêng cho môi trường chạy Java và việc triển khai đã chọn.
Đây không phải giao diện HTTP CONNECT của FTPHTTPClient. Người anh em đó xử lý FTP thông thường qua một đường hầm HTTP; đổi cổng của nó không thêm FTPS. Nếu mạng chỉ cho phép một proxy HTTP, hãy chọn một cách triển khai FTPS hoặc một bản điều chỉnh được duy trì có hỗ trợ CONNECT trên cả đường điều khiển lẫn đường dữ liệu.
Giữ cấu hình proxy trong suốt vòng đời của máy khách, và xem lại trước khi kết nối lại một phiên bản được dùng lại: việc ngắt kết nối FTPS đặt lại các nhà máy socket. Đừng thay các kiểm tra chứng chỉ bằng trust-all manager để tuyến có vẻ thành công.