溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Android中怎么實現(xiàn)Https

發(fā)布時間:2021-06-26 14:38:32 來源:億速云 閱讀:230 作者:Leah 欄目:大數(shù)據(jù)

今天就跟大家聊聊有關(guān)Android中怎么實現(xiàn)Https,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。


一、Client 向 Server 提供支持的加密算法

Android中怎么實現(xiàn)Https

首先 Client 向 Server 發(fā)送一條消息,包括 Client 各種支持的加密算法、協(xié)議版本以及壓縮算法。目的是通知 Server 在所給的算法中選擇一種,以便于之后通信的加解密。

同時,Client 會在本端生成一段隨機數(shù)作為之后對稱加密的私鑰,現(xiàn)在來簡單解釋一下對稱加密和 Client 的私鑰。舉個平時的栗子,你肯定要和你女朋友共享銀行卡的密碼(不要問為什么),假設(shè)你是 Client,女朋友是 Server,銀行卡是之后傳輸?shù)拿芪?,你設(shè)置的密碼就是密鑰。你在家里悄悄地把密碼告訴了你女朋友,密碼天知地知你知你女朋友知,這時候就算銀行卡丟了也不怕,因為沒有第三個知道密碼(密鑰),所以錢(機密信息)就不會被竊取,這就是對稱加密。

二、Server 響應(yīng) Client,傳送證書以及確認(rèn)信息

Android中怎么實現(xiàn)Https

Server 收到 Client 的消息后,會做出一次響應(yīng)。回復(fù)信息中主要包含圖中的三部分,其中證書是最重要的一部分,現(xiàn)在就來說一下證書都包含哪些東西,其作用到底是什么。這一部分要說的內(nèi)容比較多,做好心理準(zhǔn)備~

首先,說一下證書中都包含哪些信息:一些個人信息,如用戶的姓名、組織、郵箱地址等,除此之外包含了服務(wù)器生成的公鑰。公鑰就是公鑰加密(非對稱加密)的組成部分之一,還有一部分就是私鑰,現(xiàn)在繼續(xù)上一節(jié)的栗子講什么是公鑰加密。

有一天,你在家中告訴你女朋友銀行卡密碼,恰巧隔墻有耳(攻擊者竊取了密鑰),于是你的錢財就受到了威脅,因為那個人隨時可能盜刷你的銀行卡。那怎么解決呢?你想了個好辦法,你買了一把鎖(公鑰),只配兩把鑰匙(私鑰),你和你女朋友各執(zhí)一把。然后你和你女朋友說,我每周會往床頭的柜子里寫一個密碼條(對稱加密的密鑰),那就是咱們銀行卡的密碼。這樣一來,除你二人沒人能打開柜子拿到密碼,就保證了安全。

所以公鑰加密就是 Server 生成一對密鑰(公鑰和私鑰),然后私鑰自己保留,相當(dāng)于一把鑰匙,公鑰相當(dāng)于是一把鎖,任何人都可以拿到,但鑰匙卻只有一把,這樣用此鎖鎖住的東西就絕對安全了。

明白了什么是公鑰加密后,現(xiàn)在又面臨了一個問題,Server 在給 Client 傳送公鑰的過程中,公鑰被攻擊者掉包了。也就是 Client 誤使用了攻擊者的鎖,這樣密鑰就被攻擊者套走了,之后的通信就完全暴露了,所以 Client 需要清楚鎖到底是不是從 Server 傳來的,這就需要將鎖(公鑰)放到證書中,并將證書交給權(quán)威機構(gòu)(CA)做認(rèn)證,只有 CA 認(rèn)證過的鎖 Client 才會使用。

那么下一個問題來了,CA 是如何讓 Client 相信公鑰是安全的呢?就是使用數(shù)字簽名技術(shù),現(xiàn)在來簡單解釋一下什么是數(shù)字簽名。

簡單來說,數(shù)字簽名就是反著使用公鑰加密,剛才說過公鑰加密中鑰匙只有一把(私鑰只有一個),所以數(shù)字簽名就是用鎖來試鑰匙,如果鎖被打開了,
證明鎖一定是你的,因為只有你有鑰匙,賴賬也沒用。

具體來說,CA 使用自己的私鑰通過某種 Hash 算法對 Server 證書中的公鑰進行 Hash 運算得到了一個 Hash 串,然后將 Hash 串寫在證書里一并交給 Client,便于 Client 進行認(rèn)證。Client 使用 CA 提供的公鑰(鎖,任何人都能拿到)通過 Hash 運算也得到一個 Hash 串,和證書中的做對比,如果相同則證明證書一定是 CA 認(rèn)證過的,是安全的,這就是用鎖去試驗鑰匙的過程。

三、Client 檢驗證書合法性

Android中怎么實現(xiàn)Https

上一節(jié)中其實已經(jīng)說了 Client 如何認(rèn)證證書合法性了,假若證書驗證沒通過,一般情況下程序會拋出異常,處理異常時可以選擇與 Server 斷開連接。這一節(jié)主要說證書認(rèn)證通過之后,Client 又做了那些事。

證書成功認(rèn)證之后,Client 首先會對第一步中生成的那段隨機數(shù)進行 Hash 運算,然后使用證書中的公鑰對隨機數(shù)進行加密。之后會生成一條消息,并將 Hash 串和密文放到消息中發(fā)送給 Server。

在消息傳遞的過程中,解密的私鑰只有 Server 才有,所以密文在傳輸過程中絕對安全。還有一個風(fēng)險就是攻擊者可能會把消息篡改,這時,Hash 串的作用就體現(xiàn)出來了。通過 Hash 串防篡改的技術(shù)就是消息摘要,現(xiàn)在來簡單地說一下消息摘要。

簡單來說,消息摘要就是通過不可逆的算法生成一段 Hash 串,也就是一旦 Hash 串生成了,就無法在通過其他手段將其還原回原來的樣子。所以如果原始內(nèi)容的 Hash 值確定了,就證明了內(nèi)容的完整和可靠性,一旦內(nèi)容被修改,Hash 串必定和之前不同。

四、 Server 解密取出隨機數(shù),并向 Client 發(fā)送握手消息

Android中怎么實現(xiàn)Https

Server 收到 Client 發(fā)送的消息后,將密文用私鑰解密得到了隨機數(shù)。然后需要用同樣的消息摘要算法對隨機數(shù)進行運算,將算出來的 Hash 串與消息中的 Hash 串對比,如果內(nèi)容完全一致,則繼續(xù)后面的流程,如果不一致就會斷開連接。

如果隨機數(shù)無誤,Server 就會準(zhǔn)備一條握手消息,并且會使用之前和 Client 確認(rèn)過的對稱加密算法對消息加密,密鑰就是隨機數(shù)。同樣的,為防止消息被篡改,需要用消息摘要對消息進行處理。

密鑰通過公鑰加密的方式傳遞過來,之后每條消息都用此密鑰加密,從而保證了內(nèi)容的安全。

五、總結(jié)完整過程

這里盜用一張圖

Android中怎么實現(xiàn)Https

相信看完前面的內(nèi)容已經(jīng)大致明白了 https 的流程,看著上面????的圖,可把流程大致總結(jié)為:

  • 用公鑰加密的方式安全地運送 random key

  • 之后用 random key 作為密鑰進行對稱加密,保障通信內(nèi)容的安全

到這里有同學(xué)肯定會有這樣的疑問:
既然公鑰加密就已經(jīng)能保證安全了,為何不所有通信都用公鑰加密呢?這其實就說到了公鑰加密的一個致命缺點,就是公鑰加密的效率很低,所以公鑰加密只使用一次。而對稱加密的效率高于公鑰加密,所以在之后的通信中會頻繁的使用。

看完上述內(nèi)容,你們對Android中怎么實現(xiàn)Https有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI