歡迎使用CSDN markdown編輯器

2021-07-11 18:49:57 字數 2727 閱讀 9353

https原理:證書傳遞、驗證和資料加密、解密過程解析

標籤: https加密證書解密

我們都知道https能夠加密資訊,以免敏感資訊被第三方獲取。所以很多銀行**或電子郵箱等等安全級別較高的服務都會採用https協議。

https簡介

https其實是有兩部分組成:http + ssl / tls,也就是在http上又加了一層處理加密資訊的模組。服務端和客戶端的資訊傳輸都會通過tls進行加密,所以傳輸的資料都是加密後的資料。具體是如何進行加密,解密,驗證的,且看下圖。

客戶端發起https請求

這個沒什麼好說的,就是使用者在瀏覽器裡輸入乙個https**,然後連線到server的443埠。

服務端的配置

採用https協議的伺服器必須要有一套數字證書,可以自己製作,也可以向組織申請。區別就是自己頒發的證書需要客戶端驗證通過,才可以繼續訪問,而使用受信任的公司申請的證書則不會彈出提示頁面(startssl就是個不錯的選擇,有1年的免費服務)。這套證書其實就是一對公鑰和私鑰。如果對公鑰和私鑰不太理解,可以想象成一把鑰匙和乙個鎖頭,只是全世界只有你乙個人有這把鑰匙,你可以把鎖頭給別人,別人可以用這個鎖把重要的東西鎖起來,然後發給你,因為只有你乙個人有這把鑰匙,所以只有你才能看到被這把鎖鎖起來的東西。

傳送證書

這個證書其實就是公鑰,只是包含了很多資訊,如證書的頒發機構,過期時間等等。

客戶端解析證書

這部分工作是有客戶端的tls來完成的,首先會驗證公鑰是否有效,比如頒發機構,過期時間等等,如果發現異常,則會彈出乙個警告框,提示證書存在問題。如果證書沒有問題,那麼就生成乙個隨即值。然後用證書對該隨機值進行加密。就好像上面說的,把隨機值用鎖頭鎖起來,這樣除非有鑰匙,不然看不到被鎖住的內容。

傳送加密資訊

這部分傳送的是用證書加密後的隨機值,目的就是讓服務端得到這個隨機值,以後客戶端和服務端的通訊就可以通過這個隨機值來進行加密解密了。

服務段解密資訊

服務端用私鑰解密後,得到了客戶端傳過來的隨機值(私鑰),然後把內容通過該值進行對稱加密。所謂對稱加密就是,將資訊和私鑰通過某種演算法混合在一起,這樣除非知道私鑰,不然無法獲取內容,而正好客戶端和服務端都知道這個私鑰,所以只要加密演算法夠彪悍,私鑰夠複雜,資料就夠安全。

傳輸加密後的資訊

這部分資訊是服務段用私鑰加密後的資訊,可以在客戶端被還原

ssl的位置

ssl介於應用層和tcp層之間。應用層資料不再直接傳遞給傳輸層,而是傳遞給ssl層,ssl層對從應用層收到的資料進行加密,並增加自己的ssl頭。

rsa效能是非常低的,原因在於尋找大素數、大數計算、資料分割需要耗費很多的cpu週期,所以一般的https連線只在第一次握手時使用非對稱加密,通過握手交換對稱加密金鑰,在之後的通訊走對稱加密。

https在傳輸資料之前需要客戶端(瀏覽器)與服務端(**)之間進行一次握手,在握手過程中將確立雙方加密傳輸資料的密碼資訊。tls/ssl協議不僅僅是一套加密傳輸的協議,更是一件經過藝術家精心設計的藝術品,tls/ssl中使用了非對稱加密,對稱加密以及hash演算法。握手過程的具體描述如下:

1.瀏覽器將自己支援的一套加密規則傳送給**。

2.**從中選出一組加密演算法與hash演算法,並將自己的身份資訊以證書的形式發回給瀏覽器。證書裡面包含了**位址,加密公鑰,以及證書的頒發機構等資訊。

3.瀏覽器獲得**證書之後瀏覽器要做以下工作:

a) 驗證證書的合法性(頒發證書的機構是否合法,證書中包含的**位址是否與正在訪問的位址一致等),如果證書受信任,則瀏覽器欄裡面會顯示乙個小鎖頭,否則會給出證書不受信的提示。

b) 如果證書受信任,或者是使用者接受了不受信的證書,瀏覽器會生成一串隨機數的密碼,並用證書中提供的公鑰加密。

c) 使用約定好的hash演算法計算握手訊息,並使用生成的隨機數對訊息進行加密,最後將之前生成的所有資訊傳送給**。

4.**接收瀏覽器發來的資料之後要做以下的操作:

a) 使用自己的私鑰將資訊解密取出密碼,使用密碼解密瀏覽器發來的握手訊息,並驗證hash是否與瀏覽器發來的一致。

b) 使用密碼加密一段握手訊息,傳送給瀏覽器。

5.瀏覽器解密並計算握手訊息的hash,如果與服務端發來的hash一致,此時握手過程結束,之後所有的通訊資料將由之前瀏覽器生成的隨機密碼並利用對稱加密演算法進行加密。

這裡瀏覽器與**互相傳送加密的握手訊息並驗證,目的是為了保證雙方都獲得了一致的密碼,並且可以正常的加密解密資料,為後續真正資料的傳輸做一次測試。另外,https一般使用的加密與hash演算法如下:

非對稱加密演算法:rsa,dsa/dss 

對稱加密演算法:aes,rc4,3des

hash演算法:md5,sha1,sha256

總結:

伺服器 用rsa生成公鑰和私鑰

把公鑰放在證書裡傳送給客戶端,私鑰自己儲存

客戶端首先向乙個權威的伺服器檢查證書的合法性,如果證書合法,客戶端產生一段隨機數,這個隨機數就作為通訊的金鑰,我們稱之為對稱金鑰,用公鑰加密這段隨機數,然後傳送到伺服器

伺服器用金鑰解密獲取對稱金鑰,然後,雙方就已對稱金鑰進行加密解密通訊了

歡迎使用CSDN markdow

本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...

歡迎毛毛與妞妞使用CSDN markdown編輯器

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...

歡迎使用CSDN markdow1n編輯器

本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...