在這個 https 滿天飛的時代,數字證書無處不在,但是數字證書的原理到底是什麼,我一直不太清楚,今天就來談談數字證書的那些事。突然想到這個問題,是因為最近在在開發過程中了解到一種叫做 mitm(中間人攻擊) 的攻擊手段。所以又去學習了一波姿勢,哈哈。
那麼在開始之前,我們先來了解一些基本的姿勢、概念。
在這個體制中金鑰是成對生成的,每對金鑰由公鑰和私鑰組成。那麼它的加密解密過程是什麼樣的呢?
注意:由公鑰加密的內容,只能由私鑰進行解密,也就是說沒有私鑰你是無法解密的。
對於對稱加密演算法來說,加密和解密使用的金鑰是相同的,不區分公鑰以及私鑰,也就是一把鎖兩把一模一樣的鑰匙。所以如果你想要保證安全的話,就只有把鑰匙藏好,別讓任何人知道,只有通訊的雙方知道。
非對稱加密演算法中,加密和解密使用的金鑰是不同的。上面說到的公鑰密碼體制就是一種非對稱加密,公鑰與私鑰不同。
在生活中簽名的作用是啥,我想大家都明白,表示這個檔案是我認可的,同時防止檔案被篡改。那麼,在計算機領域我們怎麼進行簽名呢?一般的做法就是對資訊做 hash 處理,得到乙個 hash 值。特別注意的是,這個過程是不可逆的,也就是說你無法通過 hash 值去推導出原來的資訊。
我們舉個小例子來說明這個過程:
現在我們有兩個人物,小張和小王,他們兩個在談戀愛,但是他們是異地戀,於是他們想用信來進行交流,但是直接寫又害怕別人看見,咋辦呢?加密。
所以,小張拿出了一把鎖,這把鎖有一把鑰匙,小張自己拿著這把鑰匙,同時,他把開著的鎖(公鑰)通過快遞員給了小王。
小王收到了這把鎖之後,又拿出了一把鎖,這把鎖有兩把鑰匙(對稱加密),然後小王留一把鑰匙,把鎖和另外一把鑰匙放到盒子裡(砸不開的那種泰拉石盒子,哈哈),然後用小張給她的那把鎖鎖上。
好了,這個盒子除了小張,誰也打不開,經過快遞員,盒子到了小張那裡,小張用他的鑰匙開啟了盒子,然後放了個紙條寫上 」我愛你「,然後用盒子裡面的小王鎖把盒子鎖上。
於是乎,現在小張和小王都有了這把鎖的鑰匙,就可以加密交流了。
那這個加密方法是完美的麼?並不是,好了,傳說中的第三者要出現了。
這時候出現了另乙個人,小六,他也喜歡小王,於是,在小張第一次給那把鎖的時候,悄悄的把鎖換了,換成了自己的鎖。
然後小王以為是小張給的鎖,於是將自己的鎖和鑰匙放在了盒子裡,然後用小六的鎖鎖上了盒子。
於是乎,大家都知道了,小六用鑰匙開啟了盒子,然後把小王鎖和鑰匙拿到自己手裡,放進去了自己的鎖和鑰匙,然後用小張的鎖鎖上盒子。
小張收到了盒子之後,以為盒子裡的鎖和鑰匙是小王的,於是寫上了 」我愛你「,結果小六拿到之後,把 」我愛你「 換成了 」分手吧「 發給了小王,小王收到後很傷心,就問 」為啥要分手「,但是小六又把紙條換成了 」那就分手吧「,完蛋,分手了。
這是乙個悲傷的故事,那咋辦呢?於是乎,小張發明了一種不能銷毀的小條條(數字證書)貼在鎖上,表示這是我小張的鎖,然後小六就沒辦法偷換鎖了。
數字證書就是我們上面所說的那個小條條,那麼數字證書如何產生的呢?
首先,我們需要乙個很權威的機構來簽發數字證書給你,我們稱之為 ca,這個機構用非對稱加密產生一對金鑰。
然後,私鑰自己藏起來,用自己的私鑰對公鑰進行簽名,生成數字證書,證書檔案都有乙個明文的部分和密文的部分,明文的部分裡面包含了誰簽發的、簽發給誰、有效期是多少等等資訊,然後使用 hash 演算法進行計算,得到乙個 hash 值。然後再用私鑰對這個 hash 值進行加密,這就得到了乙個簽名資訊。然後把這兩部分合起來,放到數字證書的檔案裡,這就是乙個數字證書了。
好了,假如說我拿到了乙個數字證書,那麼我要如何去驗明他是否正確呢?
首先,我們找到簽發這個證書的機構,拿到它的公鑰,然後用公鑰去解密密文,得到 hash 值,接下來,我們通過同樣的 hash 演算法對明文進行 hash 處理,現在我們就有兩個 hash 值了,我們比對一下這兩個 hash 值,就知道證書是否正確了。
那麼,我們從何得知它是否可信呢?我是不是可以自己給自己發乙個證書啊,當然這是不行的,上面說的權威機構,就那麼些公司,這幾個公司的證書被各軟體廠商設定成「可信任的根證書」,然後這幾個根證書可以去證明其他的證書。就比如說你爸信任你,你信任你的女朋友,那麼你爸也就信任你的女朋友了。而上面說的自己給自己發的證書各廠商當然就不信任了。
這篇文章也只能說個大概,真實情況更加複雜,記得以前頒發證書使用的非對稱加密演算法是 rsa,後面有了解到一種叫 ecc 的加密演算法,安全性高,處理速度快,儲存空間占用小,有篇部落格大家可以看看。
好了,就說到這裡,其實對這方面了解的也不是太多,如果有錯誤,望指出改正。
如果各位看官看的還行,可以到 我的部落格倉庫 裡給我一顆小小的 star 支援一下,不勝感激。
證書那些事
1.p12檔案的使用 當別人需要使用你的證書時,需要匯出p12檔案.2 確認下證書是不是開發證書,如果是發布證書就會出現這樣的提示。3 包識別符號不與描述檔案包含的包識別符號不一致,按照它的提示換一下就好了,最好不要點 fix issue,點完後 xcode 會自己生成乙個包含統配包識別符號的描述檔...
SSL,HTTPS,數字證書
ssl https secure hypertext transfer protocol 安全超文字傳輸協議 它是由netscape開發並內置於其瀏覽器中,用於對資料進行壓縮和解壓操作,並返回網路上傳送回的結果。https實際上應用了netscape的完全套接字層 ssl 作為http應用層的子層。...
SSL 數字證書
secure 可靠的.安全的 socket 座 layer 層 ssl 協議 ssl 是乙個安全協議,它提供使用 tcp ip 的通訊應用程式間的隱私與完整性。網際網路的 超文字傳輸協議 http 使用 ssl 來實現安全的通訊。由於ssl技術已建立到所有主要的瀏覽器和web伺服器程式中,因此,伺服...