HTTPS 是如何工作的,?這篇文章來自于我在團隊的內(nèi)部分享。很多人可能不能很好的理解HTTPS,,不能理解為什么HTTPS的代碼要那樣寫,。因此我寫了這片博客,希望能讓更多人了解HTTPS,。 密碼(Cipher)Java 1.2內(nèi)置了一個叫做"JCE"(Java Crytography Extension)的系統(tǒng),。它主要負責Java內(nèi)部的密鑰和證書的管理,。 眾所周知,我們要給一段信息加密或者解密,,就必須要有密鑰,。這就好比開門或者鎖門,你得有一把鑰匙,。 這個密鑰可以用Java帶的KeyGenerator 或者 KeyPairGenerator生成,。前者用于生成對稱密鑰,后者用于生成分對稱密鑰,。
公鑰也許分布廣泛,,但是私鑰只有它的服務(wù)器知道,。 在一個安全的非對稱加密方案中,當使用公鑰加密一段信息后,,只有配對的私鑰可以解密這一段信息,。因此,即使黑客拿到了公鑰加密信息,,他也不能解密這一段信息。因為他沒有配對的私鑰,。所以說,,使用非對稱加密傳輸?shù)男畔⑹前踩摹?/p> 證書(Certificate)生活中,假設(shè)你要買鉆石然后進入了一家鉆石店,。你怎么能夠知道鉆石是真的,。對于多數(shù)人來說,他們沒有鉆石相關(guān)的知識,,是很難分辨鉆石的真假的,。但是,如果這家店有美國政府發(fā)布的的鉆石營業(yè)執(zhí)照,,你就能確定這家店賣的是真的鉆石,。 證書在計算機世界好比上面說的營業(yè)執(zhí)照,它可能有另一些密鑰——另一個證書(假設(shè)是“B”),。這個密鑰正是我需要的,,而“B”則是證明這個證書是可信賴的憑證。 你可能會問:我怎么知道“B”是可信的,。這是一個好問題,。 Android在手機里內(nèi)置了將近150份CA(certificate agent 代理證明機構(gòu))根證書。他們就好像美國的首席法官(like the chief justice in u.s),,在整個世界都是被認可的,。 “B”內(nèi)置了內(nèi)另一個證書(C),,因此我們會檢查“C”是否是可信的。,。,。查詢整條證書鏈,如果在這條證書鏈的末端或者根證書,,正是我們在手機中內(nèi)置的150份預設(shè)的證書之一,,我們就確信原證書是合法的。 P.S. : 證書有很多格式,。
:PKCS12證書同時包含私鑰和公鑰。因此,,PKCS12證書需要密碼開啟,。 Https最后,講講“https”部分,。之所以前面介紹“密碼”和“證書”兩部分,,是因為HTTPs包含它們。 HTTPs(HTTP over SSL)被設(shè)計用于在互聯(lián)網(wǎng)中安全通信,。 1. 何如安全通信,?怎么才能建立安全的通信呢?首先想到的是加密,。我給需要傳輸?shù)臄?shù)據(jù)加密,,然后將數(shù)據(jù)和“加密用的密鑰”傳給服務(wù)器,服務(wù)器就能使用這個k密鑰解密傳輸?shù)臄?shù)據(jù)了,。 ? 讓我們想象這樣一個場景:黑客攔截了這次通信,,這意味著加密用的密鑰和加密的數(shù)據(jù)都被盜取了。如果黑客有密鑰,,解密這段加密的數(shù)據(jù)就不是什么難事了,。好了,你的數(shù)據(jù)泄露了,。 2. 非對稱加密(Asymmetric Cryptography)如何呢,?上一個方法一點也不安全,我們考慮下一個,,非對稱加密有怎么樣呢,? 這是一個很棒的想法。你使用服務(wù)器提供的公鑰加密信息,。因為服務(wù)器是唯一知道這個與公鑰配對的私鑰的,,這意味著只有服務(wù)器能夠解密這段加密的信息。這樣,,即使是黑客攔截了這段消息,,它沒有配對的私鑰,,也無法解密這段信息。因此,,數(shù)據(jù)是安全的,。 不足之處就是,非對稱加密較對稱加密來說,,需要花費更長的時間來完成加解密的工作,。出于用戶體驗的考慮,給一大串數(shù)據(jù)執(zhí)行非對稱加解密,,并不是一個理想的方案,。 3. 最終的方案先前兩個方案都失敗了。有沒有綜合兩個方案優(yōu)勢的方案呢,?下面這個方案就是你需要的,。 HTTPS : 上圖很清楚的展示了HTTPS的執(zhí)行加解密的過程
結(jié)論因為對稱加密比非對稱加密快,因此HTTPS使用對稱加密給數(shù)據(jù)加密,,使用非對稱加密加密對稱加密生成的密鑰,,從而確保數(shù)據(jù)傳輸?shù)陌踩浴J褂眠@種方法,,加密就變的即快速又安全了,。 總之,,理解HTTPS的工作原理是非常重要,。這樣在現(xiàn)實工作生活中就可以使用這種思想保證你的數(shù)據(jù)安全。 |
|