Windowsマシンで実行されているリモートFileZillaftpサーバーがあります。ftpサーバーには、TLSを介した明示的なFTPが必要です。プロトコルはFTPであり、SFTPではありません。このサーバーの設定を変更できません。filezillaGUIクライアントを使用してこのサーバーに接続できます。
次に、org.apache.commons.netを使用してJavaアプリケーションを介してFileZillaサーバーに接続する必要があります。
private void connect(String host, String user, String password) {
try {
FTPSClient ftpClient = new FTPSClient(false);
ftpClient.connect(host);
int reply = ftpClient.getReplyCode();
if (FTPReply.isPositiveCompletion(reply)) {
// Login
if (ftpClient.login(user, password)) {
// Set protection buffer size
ftpClient.execPBSZ(0);
// Set data channel protection to private
ftpClient.execPROT("P");
// Enter local passive mode
ftpClient.enterLocalPassiveMode();
ftpClient.logout();
} else {
System.out.println("FTP login failed");
}
// Disconnect
ftpClient.disconnect();
} else {
System.out.println("FTP connect to host failed");
}
} catch (IOException ioe) {
ioe.printStackTrace();
System.out.println("FTP client received network error");
}
}
しかし、上記のコードを実行すると、次のようになります。
javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateExpiredException: NotAfter: Thu Aug 30 13:31:23 CEST 2012
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1764)
それに関しては:
ftpClient.connect(host);
たとえば、JavaコードからFilezillaサーバーに接続する方法に関するアイデア。org.apache.commons.net?
編集:私は今FTPClientに変更しようとしました(それは私が明示的なTLSをセットアップすることを可能にしますが):
FTPClient ftpClient = new FTPClient();
// Connect to host
ftpClient.connect(host);
int reply = ftpClient.getReplyCode();
if (FTPReply.isPositiveCompletion(reply)) {
// Login
boolean login = ftpClient.login(user, password);
if (login) {
ftpClient.enterLocalPassiveMode();
ftpClient.logout();
} else {
System.out.println("FTP login failed");
}
しかし、login = falseとすると、「FTPログインに失敗しました」というメッセージが表示されます。また、apacheソースをデバッグすると、応答コードは次のようになります。530 = "ログインしていません":http://en.wikipedia.org/wiki/List_of_FTP_server_return_codes