2012-08-10 154 views
1

我們遇到的最初問題是由於不可信的服務器證書導致常規FTP下載失敗。這促使我們想知道證書是否在沒有對方通知我們的情況下更新,因此我們想要下載當前的證書並將其與我們在密鑰庫中的證書進行比較。通過代理連接到FTPS

這似乎是一個比我們預料中更棘手的問題。通常的嫌疑人(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 [email protected] 
REPLY: 331  PASS userpassword 
Exception in thread "main" java.io.IOException: Invalid proxy response 

代理服務器具有可選的身份驗證功能,在我們的開發服務器上,我們通常使用「user @ host」而無需代理身份驗證。因此,我假設用戶名,主機名和密碼是遠程服務器的用戶名,密碼和密碼?

所以我嘗試添加遠程參數,這不起作用:

REPLY: 220 Blue Coat FTP Service 
SEND: USER [email protected] 
Exception in thread "main" java.io.IOException: FTPConnection closed 

將代理用戶相匹配的BlueCoat公司的格式似乎不工作,要麼:

USER %[email protected]%h %s 
PASS %p 
ACCT %w 

任何幫助,這兩個問題中的任何一個都是最受歡迎的:

  • 如何從ftps服務器檢索服務器證書呃通過FTP代理
  • 如何通過FTP代理在Java

回答

0

你可能想嘗試的Apache網絡公共庫連接到FTPS服務器。

這裏是一個similar線程使用該網絡共享庫

淨公地還擁有一個功能齊全的FTP客戶端Example這樣你就可以知道你的東西工程測試。