[轉]https加密流程和原理

其實,我對https以前只有一個大概的了解,最近工作中遇到一個問題從而將https協議做了一個徹底的學習和認知,下邊介紹一下我的個人認識,我不一定按照很官方的語句去表達,本人喜歡用通俗易懂的語言描述問題,目的是讓人理解 那么,首先,https協議是什么,一句話,https=http+ssl安全傳輸協議+ca身份認證;https是http的安全版,它不僅涵蓋http協議,而且加入了ssl安全加密傳輸協議保證數據傳輸的安全性,ca身份認證則驗證服務器域名是否是真實可靠的?

1,下面,用一幅圖展示一下https建立連接的整個過程

①客戶端的瀏覽器向服務器傳送客戶端SSL 協議的版本號,加密算法的種類,產生的隨機數,以及其他服務器和客戶端之間通訊所需要的各種信息。

②服務器向客戶端傳送SSL 協議的版本號,加密算法的種類,隨機數以及其他相關信息,同時服務器還將向客戶端傳送自己的證書。

③客戶利用服務器傳過來的信息驗證服務器的合法性,服務器的合法性包括:證書是否過期,發行服務器證書的CA 是否可靠,發行者證書的公鑰能否正確解開服務器證書的“發行者的數字簽名”,服務器證書上的域名是否和服務器的實際域名相匹配。如果合法性驗證沒有通過,通訊將斷開;如果合法性驗證通過,將繼續進行第四步。

④用戶端隨機產生一個用于后面通訊的“對稱密碼”,然后用服務器的公鑰(服務器的公鑰從步驟②中的服務器的證書中獲得)對其加密,然后傳給服務器。

⑤服務器用私鑰解密“對稱密碼”(此處的公鑰和私鑰是相互關聯的,公鑰加密的數據只能用私鑰解密,私鑰只在服務器端保留。然后用其作為服務器和客戶端的“通話密碼”加解密通訊。同時在SSL 通訊過程中還要完成數據通訊的完整性,防止數據通訊中的任何變化。

⑥客戶端向服務器端發出信息,指明后面的數據通訊將使用的步驟⑤中的主密碼為對稱密鑰,同時通知服務器客戶端的握手過程結束。

⑦服務器向客戶端發出信息,指明后面的數據通訊將使用的步驟⑤中的主密碼為對稱密鑰,同時通知客戶端服務器端的握手過程結束。

⑧SSL 的握手部分結束,SSL 安全通道的數據通訊開始,客戶和服務器開始使用相同的對稱密鑰進行數據通訊,同時進行通訊完整性的檢驗。

這里有幾個問題:?(1)請注意第2步時,當服務器給客戶端返回自己的證書時,證書包含三部分內容,公鑰、名稱、數字簽名等信息;注意數字簽名是加密的,數字簽名是用頒發機構的私鑰對本證書的公鑰,名稱以及其他信息做hash散列加密而成的,所以客戶端需要解密數字簽名來驗證該證書是否是合法可靠的,那怎么解密呢,客戶端瀏覽器會找到該證書的根證書頒發機構,然后在本機上的證書管理器里尋找?那些受信任的根證書頒發機構列表是否有該證書的根證書頒發機構,如果有,則用該根證書的公鑰解密服務器下發的證書?a,如果不能正常解密,則服務器下發的證書則被認為是偽造的,瀏覽器彈出提示框?b,如果能正常解密,則獲取到公鑰,名稱,數字簽名信息跟本身的公鑰等其他信息比對一下,確認公鑰沒有被篡改,如果公鑰不一致,則依然被認為是不可信的?因此客戶端驗證服務器的合法性取決于公鑰,而公鑰的合法性取決于ca證書頒發機構的合法性,這里會形成一個信任鏈,而終點則是CA根證書,根證書是CA機構自己辦法給自己的,根證書是一個特殊的數字證書,公鑰是公開的,而私鑰是被CA機構保存在硬件中的,所以證書的安全性取決于你對該CA機構的信任,反過來說,加入CA機構的密鑰被竊取,那么該CA機構頒發的所有證書將會存在災難性安全問題;?就像你驗證身份證是否真實,肯定去公安局驗證,那么誰來保證公安局是合法可靠的呢,沒人能保證,公安局自己生命自己是合法可靠的,就這么簡單?(2)ok,上邊扯了那么多,無為就為了一個目的,客戶端根據服務器下發的證書驗證了服務器是真實可靠的,然后進入第3步,客戶端生成一個密鑰,就是對稱加密算法的密鑰用于加密后續的數據傳輸?

總結一下,https傳輸在建立連接時使用的是非對稱加密算法,一旦連接建立完成,有后續的通訊則使用了對稱加密算法,這樣做的好處是有利于數據傳輸效率,眾所周知非對稱加密算法的性能很差勁,你懂得。?

2,好了,上邊我們介紹了https的通信流程,那么對于https通信是否就真的很安全呢,這種協議是否有問題呢,例如服務器證書是否可以被偽造呢,客戶端是否有可能被欺騙呢,答案是肯定的,我們接下來介紹幾種常見的攻擊手段。

1)一個合法有效的SSL證書誤簽發給了假冒者

這是一種由于證書認證機構工作出現疏忽、流程不完善而出現的證書被錯誤簽發的情形。其主要原因是證書認證機構在簽發SSL服務器證書前,沒有認真鑒別證書申請者提交的身份信息的真偽,或者沒有通過安全可靠的方式驗證、確認申請者就是他提供的身份材料中所聲稱的那個人。比如,假冒者提供了虛假的營業執照、組織機構代碼證書、域名注冊文件等, ? ? ? 而證書認證機構沒有或沒能夠鑒別出假冒者提供的身份信息的真偽,把一個合法有效的證書簽發給了假冒者;再比如,假冒者向證書認證機構提交了其他網站擁有者的有效身份資料,如營業執照、組織機構代碼證、域名注冊文件(這些資料,假冒者有時可通過合法的途徑獲得),而證書認證機構沒有通過安全、可靠的途徑驗證、確認證書申請者確實是其聲稱的人 ? ? ? ? 本人(或聲稱的機構本身),把本屬于另一個合法有效的網站的服務器證書簽發給了假冒網站。無論何種情形,假冒者都可以利用用戶對服務器證書的信任進行網絡欺詐活動。

2)破解SSL證書簽發CA的私鑰

如果SSL證書簽發CA的密鑰對的安全強度不夠(密鑰長度太短),或者是一個弱密鑰對,或者其產生方式有規律可循(不是完全隨機產生的),那么,就可能造成CA私鑰被破解,假冒者就可以用被破解的CA的私鑰生成、簽發合法、有效的SSL服務器證書。

但在實際中,只要CA的密鑰對有足夠的長度、按完全隨機的方式產生、且避開弱密鑰對,則CA的私鑰是根本無法破解的,或者破解的成本極高,完全超過了破解可能帶來的好處。

3)SSL證書簽發CA的私鑰泄露

證書認證機構由于管理不善,或者使用了不安全的密碼設備,導致簽發SSL證書的CA私鑰被泄露,從而使得假冒者可以利用它簽發合法有效的SSL證書。

這種情況可以通過加強認證機構的安全管理,使用安全可靠的密碼設備來避免。

4)破解SSL證書的私鑰

目前的SSL證書主要是基于RSA公開密鑰算法,對這個算法的攻擊目前除了蠻力攻擊外,還沒有有效的方法。但是,如果SSL證書密鑰對的安全強度不夠(密鑰長度不夠),或者是一個弱密鑰對,或者其產生方式不是完全隨機的,那么,就可能造成SSL證書的私鑰被破解,假冒者就可以將該SSL證書及其被破解的私鑰安裝在假冒網站上進行欺詐活動(SSL證書本身是公開的,可以很容易地得到)。

在實際應用中,只要SSL證書密鑰對有足夠的長度、按完全隨機的方式產生、且避開弱密鑰對,則SSL證書的私鑰是根本無法破解的,或者破解的成本極高,完全超過了破解可能帶來的好處。

在討論、分析SSL證書私鑰破解的風險時,我們需要提到一個人們常常關心的問題。我們知道,出于管理的規范性、品牌、知名度等原因,目前國內  的SSL證書主要由國外的認證機構簽發,對此,人們會有這種疑問和擔心,“如果SSL證書由國外認證機構簽發,那么,是否會導致SSL證書的密鑰  對容易被國外敵對機構破解、或竊取”?要回答這個問題,我們必須先了解SSL證書的密鑰對是怎樣產生的,以及私鑰是怎樣保存的。

實際上,SSL證書的密鑰對是由網站擁有者通過Web服務器軟件自己產生并保存在Web服務器軟件的密鑰庫中,或者在Web服務器軟件使用的SSL加速卡(加密硬件)中產生并保存在加密硬件中;客戶申請簽發SSL證書時,證書請求中只包含有公鑰,不包含私鑰,私鑰是不會傳送到證書認證機構的。因此,SSL證書的密鑰對是否會被破解完全取決于密鑰對的長度是否足夠長、產生的密鑰對是否是弱密鑰對、以及密鑰對的產生是否有規律可循(即是否是完全隨機產生的),與SSL證書是由國內還是國外認證機構簽發的沒有關系;私鑰是否會被竊取、泄露,完全取決于SSL證書客戶采取的私鑰保護安全措施。當然,從陰謀論的角度,由于目前的Web服務器軟件大多來自國外,它們留有后門,從而產生弱密鑰對,或者留有后門,使得密鑰對的產生有規律可循,這也是可能的,但這與SSL證書是由國內還是國外認證機構簽發的沒有關系。

5)SSL證書的私鑰泄露

SSL證書的私鑰通常是安裝在Web服務器上的,如果沒有采取足夠的安全措施對私鑰進行安全保護,則有可能導致私鑰被泄露,比如,從Web服務器中導出。

在實際中,只要通過適當的安全管理措施和技術手段,就能有效地防止SSL證書的私鑰被泄露。比如,只允許安全可信的人員訪問Web服務器并采取雙人(或多人)控制的訪問方式,并禁止SSL證書私鑰導出,或者給SSL證書私鑰加上口令保護且對口令進行分割保存(將口令分割給多個可信人員,每個人僅擁有分割后口令的一部分),又或者將SSL證書私鑰存放在加密硬件中(如SSL硬件加速器),且對私鑰采取安全保護措施(如不允許私鑰導出,或不允許私鑰明文導出)。

6)偽造一個合法有效的SSL證書

即假冒者通過一定的技術手段,利用證書技術本身存在漏洞,偽造一個由某個認證機構簽發的、有效的SSL證書。這個偽造SSL證書的格式符合X509規范,它的簽發者指向該認證機構(的某個CA證書),且該SSL證書的數字簽名可由該認證機構(對應CA證書)的公鑰驗證。

雖然,有研究者聲稱可以偽造一個X509數字證書,但真實的情況是,到目前為止,并沒有人能夠偽造一個實際可用的、有效的數字證書。

7)認證機構主動為假冒網站簽發合法有效的服務器證書

這種情況在兩個國家處于敵對狀態時有可能發生。假設A國家的某個認證機構簽發的證書被B國家的用戶信任(由于該認證機構的根證書預埋在B國家用戶使用的操作系統、應用軟件中),而這時,A國和B處于敵對、甚至戰爭狀態,A國家政府為了擾亂B國的金融秩序,要求該國的認證機構簽發假冒B國銀行網站的SSL證書,而A國的認證機構從國家利益考慮,遵從本國政府的要求,為該國政府建立的假冒網站簽發“合法、有效的”假冒SSL證書。這里說它“合法、有效”,是因為當B國用戶使用瀏覽器訪問該假冒網站時,瀏覽器對該SSL證書的信任驗證是獲得通過的。

這時,假冒網站的域名有兩種可能情形:第一種是,該網站域名與被假冒網站的域名相似但不同,用戶沒有注意到這些細小的差異,從而訪問了假冒網站。對于這種情況,由于域名不同,因此,細心的用戶有可能識破假冒行為。第二種是,假冒網站的域名同被假冒網站的域名完全相同。在這種情況下,如果A國控制了域名服務體系的“根”域名服務器,那么,A國是可以通過修改域名解析記錄,將B國用戶引導到A國建立的假冒網站上的,而且B國用戶絲毫察覺不到這種改變。這種假冒,比第一種情況要難識破、難防范得多。目前全球共13臺根域名服務器,分布情況是:主根服務器(A)1個,設置在美國弗吉尼亞州的杜勒,輔根服務器(B至M)美國9個,瑞典、荷蘭、日本各1個。考慮到目前的根域名服務器,都部署在西方國家,且主要在美國,而且“主根”域名服務器也在美國,因此,這是一個我們需要重視的問題和風險。

需要特別指出的是,出現這種假冒,與B國銀行網站本身安裝的服務器證書由誰簽發無關。因為對SSL服務器證書的信任是由瀏覽器根據其信任的根CA證書自動做出判斷的,在這個過程中用戶并不介入;只要瀏覽器驗證該SSL證書的信任路徑鏈接到一個可信任根CA證書,瀏覽器就不提出警告信息,用戶就會認為這個SSL證書是可信的。因此,只要B國用戶的主機操作系統(如Windows)、應用程序(如Firefox)中預置A國認證機構的可信根CA證書,那么,即使B國的銀行網站的服務器證書是由該國自身的認證機構簽發,A國仍然可通過A國的認證機構簽發針對B國網站的“合法、有效”的假冒SSL證書,安裝在假冒網站上。當B國用戶訪問假冒網站時,騙過B國用戶的瀏覽器對該SSL證書的可信性、有效性驗證,由于普通用戶通常是不會關心所訪問網站的SSL證書是由哪個認證機構簽發的(普通用戶不會也不知道 在瀏覽器完成SSL證書驗證后,可查看要訪問網站的SSL證書的詳情),從而騙得B國用戶對假冒網站的信任。

我國目前的主機操作系統、瀏覽器絕大部分是國外的,其中預埋了大量的根CA證書,且絕大部分是國外認證機構的,而且考慮到域名系統的“根”也在國外,因此,這一問題需要引起我們的高度重視。但是,我們也可以看到,要徹底解決這個問題,必須從操作系統、應用軟件、域名體系整個一起來考慮、解決,僅靠限定國內認證機構簽發SSL證書是無法解決這個問題的。

8)利用可信的SSL服務器證書進行中間人攻擊

假設攻擊者通過某種途徑獲得了一個與某網站域名完全相同的SSL證書,且該SSL證書(的根CA證書)被用戶的瀏覽器信任,即從證書驗證的角度它是一個“合法、有效”的證書,則該攻擊者就有可能在位于用戶與網站之間的網絡通路上,進行中間人攻擊,竊取用戶的私密信息(如圖2所示)。這種攻擊的具體實施方法如下:

(1)?攻擊者通過在網絡通路上安裝特殊的設備,或者攻破、控制網絡通信設備(如路由器、交換機等),在其上面安裝的特殊的處理代碼;

(2)?然后,攻擊者攔截所有連接到該網站的網絡連接請求,利用他得到的SSL服務器證書,假冒網絡站點與客戶端瀏覽器進行身份鑒別和建立SSL安全通道的操作;

(3)?同時,攻擊者又假冒用戶同安裝了一個SSL服務器證書的網站建立SSL連接;

(4)?之后,攻擊者作為用戶和網站之間的中間人,攔截、轉發二者之間傳送的數據,并同時竊取用戶的敏感信息。

由于攻擊者使用的SSL證書是被用戶瀏覽器信任的,因此,用戶不會察覺到這中間人的活動。

圖2利用可信的SSL服務器證書進行中間人攻擊

這里,攻擊者可通過前面1)至7)所列的方式獲得一個與被竊聽網站域名相同的SSL證書;或者,攻擊者也可以由于8)中所述的國家與國家之間網絡戰爭的原因,從某個被用戶信任的證書認證機構獲得用于中間人攻擊的“合法、有效的”SSL證書。

與8)中所述的情形類似,要進行這樣的攻擊,只需要這個用于中間人攻擊的SSL證書是被用戶瀏覽器信任的即可,不需要該SSL證書與被竊聽的網站本身安裝的SSL證書由同一個認證機構簽發。這意味著,即使我們限定國內網站的SSL證書必須由國內證書認證機構簽發,其他國家仍然可以利用他們自己國家證書認證機構簽發的、用于假冒國內網站的SSL證書,對國內網站進行中間人攻擊。因為,我國用戶使用的操作系統、瀏覽器都預埋了大量的國外證書認證機構的根CA證書,這些根CA證書被瀏覽器認為是可信的。因此,在它們之下簽發的SSL證書都被瀏覽器認為是“合法的、有效的、可信的”。

9)在用戶主機中植入偽造的根CA證書(或一個完整的CA證書鏈)

從前面的介紹我們知道,SSL服務器證書是否可信,是由瀏覽器通過調用本地的加密服務接口(如CryptoAPI、PKCS#11),檢驗、確認服務器證書的信任鏈(證書路徑)是否鏈接到本地證書庫中的一個信任的CA根證書。因此,網站假冒者、中間人攻擊者只要設法將一個偽造的根CA證書  (或一個完整的、偽造的CA證書鏈)植入到用戶計算機的操作系統、瀏覽器證書庫中,則在這個偽造的根CA證書下,網站假冒者、中間人攻擊者可簽發任何他想簽發的、并被瀏覽器信任的假冒SSL證書。而且,假冒者、中間人攻擊者甚至可以將這個偽造的根CA證書以及它的下級CA證書中的CA認證機構的名稱,取的與一個合法認證機構的名稱相同,這將更有欺騙性,用戶更難識破。

植入偽造的根CA證書(及其下級CA證書)的方式有兩種,一是,通過掛馬、病毒傳播,這是普通的假冒者、攻擊者就可以做到的;二是,在操作系統、應用軟件(如瀏覽器)中預置。第二種方式之所以有可能成立,是因為目前國內的操作系統、應用軟件絕大多數來自國外,在特殊情況下,國外的操作系統、應用軟件的廠家是有可能根據本國政府的要求,將偽造其他國家證書認證機構的根CA證書預置到操作系統、應用軟件的可信根CA證書庫中的,甚至可以做到,通過通常的人機接口(如IE瀏覽器)無法查看到該偽造的根CA證書,而當應用程序(如瀏覽器)通過加密接口(如CryptoAPI、PKCS#11)驗證SSL證書的信任鏈時,該偽造的根CA證書又起作用、被信任。

10)旁路證書可信性的驗證

當操作系統、瀏覽器本身存在后門時,是完全可以做到旁路對某些特定的SSL證書(如某個特定的、偽造的CA簽發的SSL證書)的可信性檢驗,使得這些SSL證書總是作為可信的證書被瀏覽器接受。這樣,假冒者、中間人攻擊者可以利用這個后們,簽發假冒的、被客戶端瀏覽器信任的SSL證書,達到竊取用戶信息的目的。

對SSL證書可信性驗證的旁路既可以在操作系統層面(如密碼模塊層)發生,也可以在瀏覽器層面發生。這個后門既可能是操作系統、瀏覽器廠家自己故意留下的(比如根據本國政府的要求),也可能是由于感染了木馬、病毒,使得操作系統、瀏覽器的程序代碼被修改而造成的。

我想到了cnnic的證書風波,被chrome和firefox聲明,將不信任該機構頒發的所有證書,唉,真悲劇,所以我覺得根證書頒發機構應該是一個非盈利組織,他不應該跟任何盈利性企業有利益關系,這種組織才有資格去頒發證書,否則有利益關系就容易合作去做壞事,但這個問題怎么說好呢,由于申請一個證書或者一堆證書,往往也需要不少錢,所以國內很多公司,例如中國移動,電信,銀行以及支付寶,他會在你安裝軟件的時候,給你系統里安裝他自己頒發的根證書,這樣他就可以給自己服務器上按自己辦法給自己的證書,而你的客戶端將信任他,包括很多內網的https也都是自己給自己頒發證書的

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,978評論 2 374

推薦閱讀更多精彩內容