用http進行串連的,用戶端代碼比較簡單,直接使用URL類進行串連並擷取輸入資料流即可。https不需要用戶端認證,並且伺服器端的認證是已經受信任的也同http一樣容易。當驗證的認證每年的費用得好幾千元,為了省錢,這裡主要是說java訪問未驗證認證的https的訪問。
通常有兩種方案:1、將認證匯入到TrustStore檔案中;2、修改X509認證信任管理器類的實現。推薦使用第一種方案,我們可以盡量讓伺服器的認證穩定,不在使用中修改就可以了。
第一步、匯出伺服器端認證。用ie串連地址,然後出現了認證確認的提示框,點擊查看認證-詳細資料,點擊複製到檔案,選擇base64編碼,匯出儲存檔案為test.cert。
第二步、把認證從其它檔案匯入到TrustStore檔案中。
keytool -import -file test.cer -keystore test_store
第三步、設定java的javax.net.ssl.trustStore的系統屬性
System.setProperty(“javax.net.ssl.trustStore”, “D: \\test_store”);//注意是絕對路徑
這樣通過HttpClient應用介面就可以訪問我們自己的https服務了。
常見錯誤:javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: Java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty 異常,有兩種情況:
1、沒有設定或者檔案路徑設定錯誤;
2、認證就採用keytool的預設jks類型就可以,否則也會報錯,參考內容
An implementation of PKCS12 as JCA keystore type “pkcs12″. Storing trusted anchors in PKCS12 is not supported. Users should store trust anchors in JKS format and save private keys in PKCS12 format.
來自http://www.cs.nyu.edu/artg/internet/Spring2006/readings/JSSERefGuide.html
No related posts.
原文連結:http://www.wenhq.com/article/view_711.html