Java如何跳過https的ssl證書驗證詳解

這篇文章主要介紹了Java跳過https的ssl證書驗證的解決思路,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,下面我們來深入學習下吧

打開神馬文庫首頁,明顯看到鏈接是https打頭,https和http的通信協議差別,在於https安全性更高:

http和https的差別

很明顯,二者最大的區別在於https多了一個ssl證書驗證,可以說https是身披SSL外殼的http。因爲http存在如下缺陷:

1)通信使用明文,內容可能被竊聽(重要密碼泄露)

2)不驗證通信方身份,有可能遭遇僞裝(跨站點請求僞造)

3)無法證明報文的完整性,有可能已遭篡改(運營商劫持)

而https是利用SSL/TLS建立全信道,加密數據包。HTTPS使用的主要目的是提供對網站服務器的身份認證,同時保護交換數據的隱私與完整性。

https握手過程(單向認證)

補充:"SSL"證書和CA證書究竟有什麼區別?

CA是數字證書管理機構,而SSL證書只是數字證書的一種,CA機構簽發SSL證書,所以說,SSL是CA頒發的證書中的一種。
所以,從理論上來說,如果服務端採用https協議,而自己沒有ssl證書(服務端不提供ssl證書),那麼通信是不可能成功的。所以,這裏有兩個解決思路:

1、確認是單向認證還是雙向認證,Server端是否校驗Client端(存在這種情況,服務端雖採用https協議,但並不校驗CA證書,如果需要校驗,那服務端至少得提供祕鑰)
2、可以忽略服務器證書校驗(將hostname校驗和CA證書校驗同時關閉)

網上最常用的,就是利用jdk生成keyStore文件,該方法忽略服務器證書校驗的方法,網上有很多示例,但是暫未找到可用的,先寫到這裏吧。。。。。

在針對http進行升級時,在HTTPS的證書未經權威機構認證的情況下,訪問HTTPS站點的兩種方法,一種方法是把該證書導入到Java的TrustStore文件中,另一種是自己實現並覆蓋JSSE缺省的證書信任管理器類。兩種方法各有優缺點,第一種方法不會影響JSSE的安全性,但需要手工導入證書;第二種方法雖然不用手工導入證書,但需要小心使用,否則會帶來一些安全隱患。

**Java獲取url相關參數的幾個常用方法:**

1、request.getRequestURL()返回的是完整的url,包括Http協議,端口號,servlet名字和映射路徑,但它不包含請求參數。

2、request.getRequestURI()得到的是request URL的部分值,並且web容器沒有decode過的

3、request.getContextPath() 返回the context of the request.

4、request.getServletPath()返回調用servlet的部分url.

5、request.getQueryString()返回url路徑後面的查詢字符串

示例:

當前url:http://localhost:8080/CarsiLogCenter_new/idpstat.jsp?action=idp.sptopn

request.getRequestURL() --http://localhost:8080/CarsiLogCenter_new/idpstat.jsp
request.getRequestURI() -- /CarsiLogCenter_new/idpstat.jsp
request.getContextPath() --/CarsiLogCenter_new
request.getServletPath() -- /idpstat.jsp
request.getQueryString() --action=idp.sptopn

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持神馬文庫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章