
您好,我是湘王,這是我的51CTO博客,歡迎您來,歡迎您再來~
隨著成本的下降,主流網站都已經開始使用HTTPS了。但有了可信機構頒發的證書,網站就真的絕對安全了嗎?以之前出現過的上大學被冒名頂替的事件為例,如果個人信息被「抓包」怎么辦?
看過前面技術博客的小伙伴可能還記得,HTTPS的整體過程分為證書驗證和數據傳輸階段:
(資料圖)
1、證書驗證階段
1)、瀏覽器發起HTTPS請求
2)、服務端返回HTTPS證書
3)、客戶端驗證證書是否合法,如果不合法則提示告警
2、數據傳輸階段
1)、當證書驗證合法后,在本地生成隨機數
2)、通過公鑰加密隨機數,并把加密后的隨機數傳輸到服務端
3)、服務端通過私鑰對隨機數進行解密
4)、服務端通過傳入的隨機數構造對稱加密算法,對返回結果內容進行加密后傳輸
因為非對稱加解密效率很低,而實際應用場景中端與端之間通常有大量的交互。所以,在HTTPS的場景中只有服務端保存了私鑰,因此只能實現單向的加解密,所以內容傳輸要采用對稱加密算法。
如果沒有證書頒發機構,就會出現經典的「中間人攻擊」:
這和冒名頂替上大學如出一轍:
1、本地請求被劫持(如DNS劫持等),所有請求被發送到中間人的服務器
2、中間人服務器返回中間人自己的證書
3、客戶端創建隨機數,通過中間人證書的公鑰對隨機數加密后傳送給中間人,然后憑隨機數構造對稱加密對傳輸內容進行加密傳輸
4、中間人因為擁有客戶端的隨機數,可以通過對稱加密算法進行內容解密
5、中間人以客戶端的請求內容再向正規網站發起請求
6、因為中間人與服務器的通信過程是合法的,正規網站通過建立的安全通道返回加密后的數據
7、中間人憑借與正規網站建立的對稱加密算法對內容進行解密
8、中間人通過與客戶端建立的對稱加密算法對正規內容返回的數據進行加密傳輸
9、客戶端通過與中間人建立的對稱加密算法對返回結果數據進行解密
之所以出現這種狀況,是因為:
1、客戶端不知道自己的信息被攔截了
2、客戶端完全無法驗證證書的真假
所以,用了HTTPS一樣會被抓包,HTTPS無法防止被抓包,只能防止用戶在不知情的狀態下通信被監聽。
如果用戶主動信任網站,那么數據一樣會被「中間人」竊取。
盡管HTTPS仍然不夠安全,但它至少比HTTP啥都不穿裸奔還是要強一些的。所以下面就來演示一下怎么給SpringBoot添加HTTPS服務。
先創建證書:
keytool -genkey -alias https -keyalg RSA -keysize 2048 -keystore key.p12 -validity 90
再修改SpringBoot的配置,在application.properties配置文件中加上:
server.ssl.key-store=/Users/bear/key.p12
server.ssl.key-store-password=123456
server.ssl.key-store-type=PKCS12
server.ssl.key-alias=https
然后啟動SpringBoot服務。通過Postman訪問,發現報錯:
Bad Request
This combination of host and port requires TLS.
先導出公鑰:
openssl pkcs12 -in key.p12 -clcerts -out public_key.pem
再導出私鑰:
openssl pkcs12 -in key.p12 -nodes -out private_key.pem
然后再修改Postman配置:
再次運行Postman測試,功能正常實現。
感謝您的大駕光臨!咨詢技術、產品、運營和管理相關問題,請關注后留言。歡迎騷擾,不勝榮幸~
?