對https明白了許多
http://www.cnblogs.com/zhuqil/archive/2012/07/23/2604572.html
HTTPS能夠加密信息,以免敏感信息被第三方獲取。所以很多銀行網站或電子郵箱等等安全級別較高的服務都會采用HTTPS協(xié)議。
HTTPS簡介
HTTPS其實是有兩部分組成:HTTP + SSL / TLS,也就是在HTTP上又加了一層處理加密信息的模塊。服務端和客戶端的信息傳輸都會通過TLS進行加密,所以傳輸?shù)臄?shù)據都是加密后的數(shù)據。具體是如何進行加密,解密,驗證的,且看下圖。

1. 客戶端發(fā)起HTTPS請求
這個沒什么好說的,就是用戶在瀏覽器里輸入一個https網址,然后連接到server的443端口。
2. 服務端的配置
采用HTTPS協(xié)議的服務器必須要有一套數(shù)字證書,可自己制作,也可向組織申請。區(qū)別就是自己頒發(fā)的證書需要客戶端驗證通過,才可以繼續(xù)訪問,而使用受信任的公司申請的證書則不會彈出提示頁面(startssl就是個不錯的選擇,有1年的免費服務)。這套證書其實就是一對公鑰和私鑰。如果對公鑰和私鑰不太理解,可以想象成一把鑰匙和一個鎖頭,只是全世界只有你一個人有這把鑰匙,你可以把鎖頭給別人,別人可以用這個鎖把重要的東西鎖起來,然后發(fā)給你,因為只有你一個人有這把鑰匙,所以只有你才能看到被這把鎖鎖起來的東西。
3. 傳送證書
這個證書其實就是公鑰,只是包含了很多信息,如證書的頒發(fā)機構,過期時間等等。
4. 客戶端解析證書
這部分工作是有客戶端的TLS來完成的,首先會驗證公鑰是否有效,比如頒發(fā)機構,過期時間等等,如果發(fā)現(xiàn)異常,則會彈出一個警告框,提示證書存在問題。如果證書沒有問題,那么就生成一個隨即值。然后用證書對該隨機值進行加密。就好像上面說的,把隨機值用鎖頭鎖起來,這樣除非有鑰匙,不然看不到被鎖住的內容。
5. 傳送加密信息
這部分傳送的是用證書加密后的隨機值,目的就是讓服務端得到這個隨機值,以后客戶端和服務端的通信就可以通過這個隨機值來進行加密解密了
6. 服務端解密信息
服務端用私鑰解密后,得到了客戶端傳過來的隨機值(私鑰),然后把內容通過該值進行對稱加密。所謂對稱加密就是,將信息和私鑰通過某種算法混合在一起,這樣除非知道私鑰,不然無法獲取內容,而正好客戶端和服務端都知道這個私鑰,所以只要加密算法夠彪悍,私鑰夠復雜,數(shù)據就夠安全。
7. 傳輸加密后的信息
這部分信息是服務段用私鑰加密后的信息,可以在客戶端被還原
8. 客戶端解密信息
客戶端用之前生成的私鑰解密服務端傳過來的信息,就獲取了解密后的內容。整個過程即使第三方監(jiān)聽到了數(shù)據也束手無策。。。
#######################################
#######################################
#######################################
#######################################
#######################################
- client向server發(fā)送請求https://baidu.com,然后連接到server的443端口,發(fā)送的信息主要是隨機值1和客戶端支持的加密算法。
- server接收到信息之后給予client響應握手信息,包括隨機值2和匹配好的協(xié)商加密算法,這個加密算法一定是client發(fā)送給server加密算法的子集。
- 隨即server給client發(fā)送第二個響應報文是數(shù)字證書。服務端必須要有一套數(shù)字證書,可以自己制作,也可以向組織申請。區(qū)別就是自己頒發(fā)的證書需要客戶端驗證通過,才可以繼續(xù)訪問,而使用受信任的公司申請的證書則不會彈出提示頁面,這套證書其實就是一對公鑰和私鑰。傳送證書,這個證書其實就是公鑰,只是包含了很多信息,如證書的頒發(fā)機構,過期時間、服務端的公鑰,第三方證書認證機構(CA)的簽名,服務端的域名信息等內容。
- 客戶端解析證書,這部分工作是由客戶端的TLS來完成的,首先會驗證公鑰是否有效,比如頒發(fā)機構,過期時間等等,如果發(fā)現(xiàn)異常,則會彈出一個警告框,提示證書存在問題。如果證書沒有問題,那么就生成一個隨即值(預主秘鑰)。
- 客戶端認證證書通過之后,接下來是通過隨機值1、隨機值2和預主秘鑰組裝會話秘鑰。然后通過證書的公鑰加密會話秘鑰。
- 傳送加密信息,這部分傳送的是用證書加密后的會話秘鑰,目的就是讓服務端使用秘鑰解密得到隨機值1、隨機值2和預主秘鑰。
- 服務端解密得到隨機值1、隨機值2和預主秘鑰,然后組裝會話秘鑰,跟客戶端會話秘鑰相同。
- 客戶端通過會話秘鑰加密一條消息發(fā)送給服務端,主要驗證服務端是否正常接受客戶端加密的消息。
- 同樣服務端也會通過會話秘鑰加密一條消息回傳給客戶端,如果客戶端能夠正常接受的話表明SSL層連接建立完成了。
問題:
1.怎么保證保證服務器給客戶端下發(fā)的公鑰是真正的公鑰,而不是中間人偽造的公鑰呢?
2.證書如何安全傳輸,被掉包了怎么辦?
數(shù)字證書內容
包括了加密后服務器的公鑰、權威機構的信息、服務器域名,還有經過CA私鑰簽名之后的證書內容(經過先通過Hash函數(shù)計算得到證書數(shù)字摘要,然后用權威機構私鑰加密數(shù)字摘要得到數(shù)字簽名),簽名計算方法以及證書對應的域名。
驗證證書安全性過程
當客戶端收到這個證書之后,使用本地配置的權威機構的公鑰對證書進行解密得到服務端的公鑰和證書的數(shù)字簽名,數(shù)字簽名經過CA公鑰解密得到證書信息摘要。
然后證書簽名的方法計算一下當前證書的信息摘要,與收到的信息摘要作對比,如果一樣,表示證書一定是服務器下發(fā)的,沒有被中間人篡改過。因為中間人雖然有權威機構的公鑰,能夠解析證書內容并篡改,但是篡改完成之后中間人需要將證書重新加密,但是中間人沒有權威機構的私鑰,無法加密,強行加密只會導致客戶端無法解密,如果中間人強行亂修改證書,就會導致證書內容和證書簽名不匹配。
那第三方攻擊者能否讓自己的證書顯示出來的信息也是服務端呢?(偽裝服務端一樣的配置)顯然這個是不行的,因為當?shù)谌焦粽呷A那邊尋求認證的時候CA會要求其提供例如域名的whois信息、域名管理郵箱等證明你是服務端域名的擁有者,而第三方攻擊者是無法提供這些信息所以他就是無法騙CA他擁有屬于服務端的域名。
運用與總結
安全性考慮:
HTTPS協(xié)議的加密范圍也比較有限,在黑客攻擊、拒絕服務攻擊、服務器劫持等方面幾乎起不到什么作用
SSL證書的信用鏈體系并不安全,特別是在某些國家可以控制CA根證書的情況下,中間人攻擊一樣可行
中間人攻擊(MITM攻擊)是指,黑客攔截并篡改網絡中的通信數(shù)據。又分為被動MITM和主動MITM,被動MITM只竊取通信數(shù)據而不修改,而主動MITM不但能竊取數(shù)據,還會篡改通信數(shù)據。最常見的中間人攻擊常常發(fā)生在公共wifi或者公共路由上。
成本考慮:
SSL證書需要購買申請,功能越強大的證書費用越高
SSL證書通常需要綁定IP,不能在同一IP上綁定多個域名,IPv4資源不可能支撐這個消耗(SSL有擴展可以部分解決這個問題,但是比較麻煩,而且要求瀏覽器、操作系統(tǒng)支持,Windows XP就不支持這個擴展,考慮到XP的裝機量,這個特性幾乎沒用)。
根據ACM CoNEXT數(shù)據顯示,使用HTTPS協(xié)議會使頁面的加載時間延長近50%,增加10%到20%的耗電。
HTTPS連接緩存不如HTTP高效,流量成本高。
HTTPS連接服務器端資源占用高很多,支持訪客多的網站需要投入更大的成本。
HTTPS協(xié)議握手階段比較費時,對網站的響應速度有影響,影響用戶體驗。比較好的方式是采用分而治之,類似12306網站的主頁使用HTTP協(xié)議,有關于用戶信息等方面使用HTTPS。
————————————————
版權聲明:本文為CSDN博主「會飛的狗~」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權協(xié)議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/xiaoming100001/article/details/81109617