我目前正在測試SSL的水域,並且是SSL新手。作爲我的研究的一部分,我在java空間中遇到了兩種不同的SSL實現。我應該使用哪種SSL實現?
首先,讓我說明我的需求,這非常簡單,我只需要一個使用https將數據發佈到URL的流程。
這兩個解決方案中,第一個是純Java實現(僅使用核心Java類),另一個使用Apache HTTPClient執行http。最初,作爲我的測試的一部分,我會得到臭名昭着的「無法找到有效的證書路徑到請求的目標」異常,並且當我從證書(從服務器接收到)不是Java密鑰存儲。一旦我將證書添加到Java密鑰存儲中,應用程序在兩種情況下均可正常工作。 但是,在我使用HTTPClient時,我注意到了使用SSLSocketFactory。
當我測試的HttpClient用下面的代碼,
HttpClient httpClient = new HttpClient();
PostMethod postMethod = new PostMethod(target);
postMethod.setQueryString("someQueryString");
try {
httpClient.executeMethod(postMethod);
System.out.println("Response code: " + postMethod.getStatusLine());
BufferedReader in = new BufferedReader (new InputStreamReader(postMethod.getResponseBodyAsStream()));
String temp;
while ((temp = in.readLine()) != null){
response += temp + "\n";
}
temp = null;
in.close();
System.out.println("Server response:\n'" + response + "'");
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
postMethod.releaseConnection();
}
它工作得很好,所以我不知道有什麼用的SSLSocketFactory實現的?我最初認爲這很有用,因爲我們希望自動將證書添加到密鑰存儲區。在分析中,我是對的嗎?
如果我的分析屬實,哪個實施比較好?
- 手動安裝證書是否更好?這種方法有什麼缺點?並且證書是否會過期?如果是這樣,我是否需要再次安裝新證書?
- 或者我應該使用SSLSocketFactory自動完成整個密鑰存儲添加功能?
您的輸入將不勝感激。謝謝。
嗯,據我所知,我不需要任何SSL定製。當我試圖使用HTTPClient開箱時,我得到的唯一錯誤是「無法找到有效的證書路徑到請求的目標」,我通過使服務器證書成爲Java密鑰存儲的一部分來解決這個問題。那麼這個實現對我來說是最好的選擇嗎? – Seagull