私たちが最初に遭遇した問題は、信頼できないサーバー証明書が原因で通常の FTP ダウンロードが失敗し始めたことでした。これにより、カウンターパーティからの通知なしに証明書が更新されたかどうか疑問に思うようになり、現在の証明書をダウンロードして、キーストアにある証明書と比較したいと考えました。
これは、私たちが予想していたよりも難しい問題のようです。通常の容疑者 (firefox、filezilla、...) は、FTP プロキシを介して FTP サーバーに接続するタスクに対応していないように見えたので、好奇心から、より低レベルの Java アプローチで遊んでみました。私は一生それを機能させることはできません。
最初の (過度に単純化された) Java の試み:
// create proxy connection
SocketFactory plainFactory = SocketFactory.getDefault();
Socket proxy = plainFactory.createSocket(proxyServer, proxyPort);
// create ssl connection on top of it?
SSLSocketFactory sslFactory = getSocketFactory();
SSLSocket socket = (SSLSocket) sslFactory.createSocket(proxy, server, port, true);
このアプローチは明らかに機能しません。
次に、ftp4j (http://www.sauronsoftware.it/projects/ftp4j/) をいじり始めました。クリーンでアクセスしやすいコードベースのようです。
FTPClient client = new FTPClient();
client.setConnector(new FTPProxyConnector(proxyHost, proxyPort));
client.getConnector().setConnectionTimeout(0);
client.getConnector().setReadTimeout(0);
client.setSSLSocketFactory(getSocketFactory());
// also tried SECURITY_FTPS
client.setSecurity(FTPClient.SECURITY_FTPES);
client.connect(server, port);
これは以下を出力します:
REPLY: 220 Blue Coat FTP Service
SEND: USER anonymous
REPLY: 530-User Access denied.
REPLY: 530-
REPLY: 530-Usage: USER username@hostname
REPLY: 331 PASS userpassword
Exception in thread "main" java.io.IOException: Invalid proxy response
プロキシ サーバーにはオプションの認証があり、開発サーバーでは通常、プロキシ認証なしで "user@host" を使用します。そのため、ユーザー名、ホスト名、およびパスワードはリモートサーバーのものであると思いますか?
だから私はリモートパラメータを追加しようとしましたが、これはうまくいきません:
REPLY: 220 Blue Coat FTP Service
SEND: USER test@ftps.example.com
Exception in thread "main" java.io.IOException: FTPConnection closed
ブルーコート形式に一致するようにプロキシユーザーを追加しても機能しないようです。
USER %u@%h %s
PASS %p
ACCT %w
これらの 2 つの問題のいずれかに関するヘルプは大歓迎です。
- ftp プロキシ経由で ftps サーバーからサーバー証明書を取得する方法
- javaでftpプロキシ経由でftpsサーバーに接続する方法