2011-08-28 50 views
2

我正在寫一個API Java包裝和我有關於SSL和HTTPS連接一個根本性的問題HTTPS連接。我知道何時在瀏覽器中進行HTTPS連接,信息在瀏覽器和服務器之間進行了加密,因此如果信息被攔截,則無法讀取信息。就我所知,這是SSL連接的基礎。此Java代碼是否仍然安全?使用URL類

這是否安全的相同水平的Java方法調用,但是服務器之間存在嗎?例如,如果我創建一個地址爲「https://server.com/」的URL類,那麼Java代碼和服務器之間的信息是否會被加密?

換句話說,在這種類型的代碼安全返回的信息(直接從我的API,返回一個JSON字符串):

public static String getJSON() { 
    String url = "https://nxtpass.com/create/?" + 
       "apiKey=" + apiKey // so on, building up the query 
     return IOUtils.toString(new URL(url).openStream()); 
} 

如果我是那個地址輸入到瀏覽器中,返回的JSON字符串將被HTTPS連接保護(我相信這是真實的)。上面的代碼中是否存在相同的安全性?如果不是,我會怎麼做呢?

回答

3

是。行

new URL(url).openStream() 

相當於

new URL(url).openConnection().getInputStream() 

openConnection()呼叫返回指定協議的合適的連接。

在這種情況下,這將是一個HttpsURLConnection,被編碼到實際做HTTPS。

3

如果我理解你的問題的權利,Java分佈式系統已經內置了支持JSSE,其中有協議處理程序SSL(基於SSL的HTTP)。所以,是的,通過java.net.URL類建立的連接對於被訪問的HTTPS URL是安全的。

2

是的,這被固定爲在瀏覽器的情況下。您在URL中傳遞的所有參數都將通過SSL進行保護。

附註:如果服務器端證書不受信任[如果是自簽名證書],則在調用之前需要設置以下兩個系統屬性 - 您需要將相應的公共證書導入本地密鑰存儲[路徑/到/ trutstore]。

System.setProperty("javax.net.ssl.trustStore","path/to/trutstore"); 
System.setProperty("javax.net.ssl.trustStorePassword", "password"); 
0

HTTPS是基於SSL的HTTP,客戶端是一個瀏覽器的Java,VB,Smalltalk中,SNOBOL,Fortran語言,...