1. 程式人生 > >15分鐘理解HTTPS——通俗篇

15分鐘理解HTTPS——通俗篇

win 屬於 實現原理 公式 bcd 互質數 server top 實踐

| 導語 它很深奧嗎?你肯定常常見過它,使用它,甚至離不開它... 它很淺顯嗎?你可能覺得看透它,理解它,甚至懂它... 讓我們用15分鐘,不那麽學術地將它的深挖到底~


技術分享圖片

什麽?如何證明我是我?本文要上升到這樣的哲學高度了嗎?嚇得作者筆都掉了,不,是鍵盤按鍵都飛出來了


HTTPS
的身份認證機制還真的是一個如何證明我是我的問題,並且巧妙地使用了零知識證明。先來看個故事吧!

我知道某帶密碼門鎖房間的密碼,如何證明我有這個密碼呢?下面有兩種方式:
①我把密碼告訴你,你用密碼打開該房間的鎖。

②我們都知道房間內有某一物體,我用密碼打開房間的門,然後把物體拿出來給你看。

方式①的結果是密碼泄漏了,如果換作二戰被俘的情報員或者被四十大盜劫持的阿裏巴巴身上,他們的結局一定是被無情殺害了。

方式②是零知識證明。它指的是證明者能夠在不向驗證者提供任何有用的信息的情況下,使驗證者相信某個論斷是正確的。

那下面我們來挖一挖HTTPS如何借鑒這種思想進行身份認證的。不過,先來看一眼目錄吧!沒有目錄的長文都是耍流氓

技術分享圖片

1.HTTPS原理概述

1.1什麽是HTTPS

1.2HTTPS保證安全通信的原理(加密|簽名|證書)

1.3一次完整的HTTPS過程

2.HTTPS實踐與應用

2.1HTTP升級到HTTPS

2.2Fiddler抓包HTTPS

2.3局限性和使用場景

1.1什麽是HTTPS

一句話:超文本傳輸安全協議(Hypertext Transfer Protocol Secure, HTTP

)是在應用層和傳輸層中間多了安全層的HTTP協議。安全層協議是SSL或者TLS

技術分享圖片

為什麽要有HTTPS呢?因為HTTP通信是明文傳輸,有以下風險,而HTTPS完美地解決了這些風險。

技術分享圖片

1.2HTTPS保證安全通信的原理

(一) 加密——防竊聽

舉一個最簡單的加密,abc->bcd

l 加密函數f:將加密過程抽象成函數。

l 密鑰: f(n)中的參數n。上例中n=1

l 對稱加密:加密和解密的密鑰相同。計算量小,速度快。

l 非對稱加密:加密和解密的密鑰不同,一般地,服務器方存有私鑰不外傳,而把對應公鑰開放給客戶端。客戶端用公鑰加密內容,服務器用私鑰解密。計算量大,速度慢。

HTTPS的真正加密過程:用非對稱加密方式協商對稱密鑰;通信時使用協商好的對稱密鑰。這段話在看完1.3會更加清晰。

對稱加密非常好理解。HTTPS關鍵技術之一的非對稱加密是如何實現的呢?以比較具有代表性的RSA算法為例,解剖下非對稱加密實現原理:

首先,存在這樣一個事實(1)。其次,非對稱加密是公鑰私鑰計算過程大致如(2)所述。然後,(3)利用兩個式子可以進行加密和解密。

那麽,RSA實現非對稱加密的原理問題,可以簡化為(3)中兩個式子的m是否相等。將(1)中的等式帶入(3)中公式,加以不長不短的數學證明,結果顯示兩式相等。Done! 總結來說,RSA的實現基於的是數學世界中存在的兩個質數之間不對稱關系。(文末附有證明的參考資料)

(1)兩個互質數之間存在一個等式

如果兩個正整數an互質,那麽一定可以找到整數b,使得 ab-1 n整除,或者說abn除的余數是1。這時,b就叫做a的“模反元素”。這個等式可以由“歐拉定理”證明。

(2)利用這兩個互質數產生一對公鑰私鑰

S1.隨機選擇兩個不相等的質數pq
S2.
計算pq的乘積n

S3.計算n的歐拉函數φ(n)

S4.隨機選擇一個整數e,條件是1< e < φ(n),且eφ(n) 互質。

  S5.計算e對於φ(n)的模反元素d

  S6.n,e)是公鑰,(n,d)是私鑰。

(3)加密和解密

加密:m是要加密信息,用(n,e)計算出加密後信息c技術分享圖片

解密:用(n,d)計算出原始信息m技術分享圖片

(二) 簽名——防篡改

簽名如何證明信息沒有被纂改?
舉例子:
開發gg小猴很帥,到處發自己的公鑰給妹子。有一天他中意一個妹子,想私下給妹子加密寫信。為了防止信被他的好哥們亂改,他這樣做:

把信的內容哈希得到摘要,摘要進行私鑰加密得到簽名,簽名附到信後面。

技術分享圖片

妹子收到了信,熟練地把信內容哈希得到摘要,把簽名公鑰解密得到摘要,對比兩個摘要相同,相信了這信沒被別人纂改過。防止篡改的原理就是,外人只改動內容會對不上簽名中的摘要,而簽名又是加密過的無法和內容修改的一致。

技術分享圖片

(三) 證書——防冒充

可惜,妹子還是套路不夠深….

小猴的哥們小豬也喜歡這個妹子,不敢表白,偷偷冒充了小猴。

他盜用小猴電腦,把小猴公鑰換成自己公鑰,用自己的私鑰給妹子寫信。

妹子以為自己拿著小猴的公鑰,驗證了信沒被纂改過。而實際上這公鑰是小豬的,信也是小豬寫的。

技術分享圖片

要避免這樣的悲劇,“數字證書”就出場了。既然無法確信“小猴的公鑰是小猴的“,那只好找權威機構幫忙認證了

小猴去證書中心(CA)申請證書,CA用自己的私鑰對小猴的公鑰和相關信息一起加密,生成“數字證書“。小猴再寫信時,附上簽名和證書。

妹子收到信,用CA的公鑰(這個不好冒充)解密證書,確信得到的是小猴的公鑰了。

技術分享圖片

再來看開始提到的零知識證明。它的一個應用是Guillo-Ouisquater身份認證,這種認證方式主要基於了RSA公鑰算法的基本思想。換句話說,前述的簽名和證書的身份認證屬於零知識證明的應用。過程需要一個權威CA,認證可靠,並沒有提供任何有用信息,也不會因認證次數增加而安全性降低。

1.3一次完整的HTTPS過程

流程概述:

  1. 客戶端向服務器索要公鑰,並驗證
  2. 雙方協商生成對話密鑰(對稱加密)
  3. 采用對稱加密通信

步驟12稱為握手過程。

技術分享圖片

驗證證書時,瀏覽器一般存有大型可信CA的公鑰。驗證證書是否為真,是否過期等。如驗證不通過,瀏覽器會顯示警告,用戶可以選擇繼續訪問。

至此,客戶端和服務都有了隨機數①②③,用它們三個形成相同的對稱密鑰,用於接下來通信。

Session恢復:

如果出於某種原因,對話中斷,就需要恢復對話。

? Session IDsession ID保存在一臺服務器中,如果客戶端能提供上次的session ID,就不再需要重新握手。

? Session ticket:不局限於一臺服務器, session ticket是上次對話中服務器發送的,內容是加密過的密鑰和解密方法等,客戶端如果能提供session ticket,也可以恢復對話。

2.HTTPS實踐與應用

2.1HTTP升級到HTTPS

1申請證書

認證級別

ü 域名認證:最低級別認證,可以確認申請人擁有這個域名。對於這種證書,瀏覽器會在地址欄顯示一把鎖。

ü 公司認證:確認域名所有人是哪一家公司,證書裏面會包含公司信息。

ü 擴展認證:最高級別的認證,瀏覽器地址欄會顯示公司名。

證書類型

? 單域名證書:只能用於單一域名,foo.com的證書不能用於www.foo.com

? 通配符證書:可以用於某個域名及其所有一級子域名,比如*.foo.com的證書可以用於foo.com,也可以用於www.foo.com

? 多域名證書:可以用於多個域名,比如foo.combar.com

2證書安裝和配置

一般地,這部分工作會被運維的同事做。

3修改鏈接

通常直接去掉協議名稱,根據用戶輸入的協議為準。如://vip.qq.com

當用戶使用http請求時還是不走https,這時還可以:

不修改鏈接,修改web服務器配置,使用301重定向,如

server {

listen 80;

server_name domain.com www.domain.com;

return 301 https://domain.com$request_uri;

}

2.2Fiddler抓包HTTPS

1.開啟fiddler支持https抓包

技術分享圖片

2.訪問fiddler代理IP:端口,點擊安裝證書

技術分享圖片

3.對證書授信

? ios:設置-通用-描述文件與設備管理-點進去選擇信任

? android:設置-安全和隱私-受信任的憑據-用戶-點進去選擇信任

技術分享圖片

2.3HTTPS的局限性和使用場景

https由於過程復雜,耗時稍慢,需要證書等因素,使得需要高安全性的網站才應用它,或者只在註、登陸、支付等關鍵頁面才使用。

https如果經過優化,不會明顯影響性能,所有場景都適合使用。

參考資料

RSA算法原理(一)》

http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html

RSA算法原理(二)》

http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html

《數字簽名是什麽?》

http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html

https://wenku.baidu.com/view/5cf354fd31b765ce04081463.html
https://wenku.baidu.com/view/88a0f233eefdc8d376ee328e.html

SSL/TLS協議運行機制的概述》

http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html

《圖解SSL/TLS協議》

http://www.ruanyifeng.com/blog/2014/09/illustration-ssl.html

HTTPS 升級指南》

http://www.ruanyifeng.com/blog/2016/08/migrate-from-http-to-https.html

等...

15分鐘理解HTTPS——通俗篇