Https 那點事

Https 那點事

本文分三塊敘述:

1 CA相關知識

2HTTPS 通信過程

3如何搭建https服務

首先總體看下https 通信過程:

1.服務器向CA機構獲取證書,當瀏覽器首次請求服務器的時候,服務器返回證書給瀏覽器。(證書包含:公鑰+申請者與頒發者的相關信息+簽名)

2.瀏覽器得到證書後,開始驗證證書的相關信息,證書有效(沒過期等)。

3.驗證完證書後,如果證書有效,客戶端是生成一個隨機數,然後用證書中的公鑰進行加密,加密後,發送給服務器,服務器用私鑰進行解密,得到隨機數。之後雙方便開始用該隨機數作為鑰匙,對要傳遞的數據進行加密、解密

接下來進行一一解釋


-------------------------CA相關-----------------------------

什麼是CA

CA是Certificate Authority的縮寫,也叫“證書授權中心”。

  它是負責管理和簽發證書的第三方機構,CA必須是所有行業和所有公眾都信任的、認可的。因此它必須具有足夠的權威性。

在我國,要成為CA必須獲得國家工信部的批准。我國第一家獲得CA資質的機構是山東省數字證書認證管理有限公司,獲批於2005年8月19日。

目前,全球主流的CA機構有Symantec、GeoTrust、DigiCert、Thawte、GlobalSign、RapidSSL等。

不管對於企業還是個人用戶而言,安裝由權威CA機構頒發的SSL證書,訪問HTTPS加密網站,才是網站的“正確打開方式”

什麼是CA證書?

CA 證書,顧名思義,就是CA頒發的證書。

  儘管CA證書如此強大,也不是所有需要數字證書的地方,都必須使用CA證書。假如業務需求的安全等級不高,使用自主研發的數字證書也可以,沒有達到國家標準的必要。

但如果是公眾應用軟件,使用主流CA證書就可以避免安全防護軟件的質疑詢問,給用戶的體驗更良好。

假如要開發一個在iOS環境下運行的軟件,就必須先向蘋果公司旗下的CA申請數字證書。

當軟件開發完成運行時,iOS系統會自動對軟件內置的數字證書進行驗證,以此確保系統的安全和穩定。

但為此,軟件開發商需要付出更多的軟件開發成本,用於支付購買各種證書的費用。

由此我們可以看出,使用數字證書,就是校驗數字證書的過程。


CA簽發過程:

1 .服務方 S 向第三方機構CA提交公鑰、組織信息、個人信息(域名)等信息並申請認證;

注意:申請證書不需要提供私鑰,確保私鑰永遠只能服務器掌握

2 .CA 通過線上、線下等多種手段驗證申請者提供信息的真實性,如組織是否存在、企業是否合法,是否擁有域名的所有權等;

3 .如信息審核通過,CA 會向申請者簽發認證文件-證書。

總結下:

證書=公鑰+申請者與頒發者信息+簽名

證書包含以下信息:申請者公鑰、申請者的組織信息和個人信息、簽發機構 CA 的信息、有效時間、證書序列號等信息的明文,同時包含一個簽名;

簽名的產生算法:首先,使用散列函數計算公開的明文信息的信息摘要,然後,採用 CA 的私鑰對信息摘要進行加密,密文即簽名;


CA證書驗證過程:

1 .客戶端 C 向服務器 S 發出請求時,S 返回證書文件;

2 .客戶端 C 讀取證書中的相關的明文信息,採用相同的散列函數計算得到信息摘要,然後,用CA 的公鑰解密簽名數據,對比證書的信息摘要,如果一致,則可以確認證書的合法性,即公鑰合法;

3.客戶端然後驗證證書相關的域名信息、有效時間等信息;

4.客戶端會內置信任 CA 的證書信息(包含公鑰),如果CA不被信任,則找不到對應 CA 的證書,證書也會被判定非法。


-------------------------HTTPS相關-----------------------------

什麼是HTTPS協議

可以理解為HTTP+SSL/TLS, 即 HTTP 下加入 SSL 層,HTTPS 的安全基礎是 SSL,因此加密的詳細內容就需要 SSL,用於安全的 HTTP 數據傳輸

http網絡協議棧:

<table><tbody>

http

tcp

ip

/<tbody>/<table>

https 網絡協議棧:

<table><tbody>

HTTP

ssl

tcp

ip

/<tbody>/<table>

HTTPS 相比 HTTP 添加了SSL/TLS握手以及數據加密傳輸,也屬於應用層協議。意味著每次通信都多走層SSL協議。SSL為數據通信提供安全保證。

SSL如何保證通信安全?

1 HTTP協議運行在TCP之上,所有傳輸的內容都是明文,客戶端和服務器端都無法驗證對方的身份。

2 HTTPS是運行在SSL/TLS之上的HTTP協議,SSL/TLS運行在TCP之上。所有傳輸的內容都經過加密,具體通信內容採用對稱加密(注意是對稱加密),但對稱加密的密鑰用服務器方的證書進行了非對稱加密。

接下來看下圖,解釋上文提到的通信內容採用的對稱加密秘鑰如何生成

Https 那點事

前5步其實就是HTTPS的握手過程,這個過程主要是認證服務端證書(內置的公鑰)的合法性。因為非對稱加密計算量較大,整個通信過程只會用到一次非對稱加密算法(主要是用來保護傳輸客戶端生成的用於對稱加密的隨機數私鑰)。後續內容的加解密都是通過一開始約定好的對稱加密算法進行的。

有同學可能會疑惑為什麼又多弄出個對稱加密?

1 什麼是對稱加密? 是指加密和解密使用的密鑰是同一個密鑰,或者可以相互推算。

2 對稱加密的優點? 是算法簡單,加解密效率高,系統開銷小,適合對大數據量加密。

3 對稱加密的缺點? 是解密加密使用同一個密鑰,需要考慮遠程通信的情況下如何安全的交換密鑰,如果密鑰丟失,

所謂的加密解密就失效了。

4 結論: 由於非對稱加密的計算量大,而且對字節數有一點限制,顯然不適合對具體的通信過程做加密,這就引出了對稱加密來提高通信效率。這其實是一個折中的設計

握手過程的簡單描述:

1.客戶端C 將自己支持的一套加密規則發送給服務端。

2.服務端S 從中選出一組加密算法與HASH算法,並將自己的身份信息以CA證書的形式發回給瀏覽器。證書裡面包含了網站地址,加密公鑰,以及證書的頒發機構等信息。

3.客戶端C 獲得服務端S 證書之後瀏覽器要做以下工作:

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

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

c) 使用約定好的HASH計算握手消息,並使用生成的隨機數密碼對消息進行加密,最後將之前生成的所有信息發送給網站。

4.服務端S 接收 客戶端C 發來的數據之後要做以下的操作:

a) 使用自己的私鑰將信息解密取出客戶端生成的隨機密碼R,使用該密R碼解密瀏覽器發來的握手消息,並驗證HASH是否與客戶端C 發來的一致。

b) 使用密碼加密一段握手消息,發送給客戶端C。

5.客戶端C 用R密碼解密並計算握手消息的HASH,如果與服務端發來的HASH一致,

此時握手過程結束,之後所有的通信數據將由之前客戶端C 生成的隨機密碼R並採用對稱加密算法進行加密。

有同學疑惑為什麼弄這麼複雜的握手過程?

客戶端C與服務端S互相發送加密的握手消息並驗證,目的是為了保證雙方都獲得了一致的密碼,並且可以正常的加密解密數據,為後續真正數據的傳輸做一次測試。由此可見TLS/SSL中使用了非對稱加密,對稱加密以及HASH算法。接下來再覆盤下三者如何協同工作

HTTPS一般使用的加密與HASH算法如下:

非對稱加密算法:RSA,DSA/DSS

對稱加密算法:AES,RC4,3DES

HASH算法:MD5,SHA1,SHA256

其中非對稱加密算法用於在握手過程中加密生成的密碼,對稱加密算法用於對真正傳輸的數據進行加密,而HASH算法用於驗證數據的完整性。

Https 那點事

由於客戶端C 生成的密碼是整個數據加密的關鍵,因此在傳輸的時候使用了非對稱加密算法對其加密。

非對稱加密算法會生成公鑰和私鑰,公鑰只能用於加密數據,因此可以隨意傳輸,而服務端S 的私鑰用於對數據進行解密,所以服務端S都會非常小心的保管自己的私鑰,防止洩漏。

TLS握手過程中如果有任何錯誤,都會使加密連接斷開,從而阻止了隱私信息的傳輸。


-------------------------HTTPS服務搭建-----------------------------

說了那麼對理論,接下來探討如何搭建https 服務。公式: https = http+ssl.那麼我們就需要在原有的http協議棧中添加SSL模塊。接下來會舉兩個例子:tomcat 與 nginx 如何搭建來供參考


後臺回覆「 https 」來獲取相關文章



Https 那點事


分享到:


相關文章: