在這個 HTTPS 滿天飛的時代,數字證書無處不在,可是數字證書的原理究竟是什麼,我一直不太清楚,今天就來談談數字證書的那些事。html
忽然想到這個問題,是由於最近在在開發過程當中瞭解到一種叫作 MITM(中間人攻擊) 的攻擊手段。因此又去學習了一波姿式,哈哈。git
那麼在開始以前,咱們先來了解一些基本的姿式、概念。github
在這個體制中密鑰是成對生成的,每對密鑰由 公鑰 和 私鑰 組成。那麼它的加密解密過程是什麼樣的呢?算法
注意: 由公鑰加密的內容,只能由私鑰進行解密,也就是說沒有私鑰你是沒法解密的。安全
對於對稱加密算法來講,加密和解密使用的密鑰是相同的,不區分公鑰以及私鑰,也就是一把鎖兩把如出一轍的鑰匙。因此若是你想要保證安全的話,就只有把鑰匙藏好,別讓任何人知道,只有通訊的雙方知道。post
非對稱加密算法中,加密和解密使用的密鑰是不一樣的。上面說到的公鑰密碼體制就是一種非對稱加密,公鑰與私鑰不一樣。學習
在生活中籤名的做用是啥,我想你們都明白,表示這個文件是我承認的,同時防止文件被篡改。那麼,在計算機領域咱們怎麼進行簽名呢?通常的作法就是對信息作 hash 處理,獲得一個 hash 值。特別注意的是,這個過程是不可逆的,也就是說你沒法經過 hash 值去推導出原來的信息。加密
咱們舉個小例子來講明這個過程:htm
如今咱們有兩我的物,小張和小王,他們兩個在談戀愛,可是他們是異地戀,因而他們想用信來進行交流,可是直接寫又懼怕別人看見,咋辦呢?加密。開發
因此,小張拿出了一把鎖,這把鎖有一把鑰匙,小張本身拿着這把鑰匙,同時,他把開着的鎖(公鑰)經過快遞員給了小王。
小王收到了這把鎖以後,又拿出了一把鎖,這把鎖有兩把鑰匙(對稱加密),而後小王留一把鑰匙,把鎖和另一把鑰匙放到盒子裏(砸不開的那種泰拉石盒子,哈哈),而後用小張給她的那把鎖鎖上。
好了,這個盒子除了小張,誰也打不開,通過快遞員,盒子到了小張那裏,小張用他的鑰匙打開了盒子,而後放了個紙條寫上 」我愛你「,而後用盒子裏面的小王鎖把盒子鎖上。
因而乎,如今小張和小王都有了這把鎖的鑰匙,就能夠加密交流了。
那這個加密方法是完美的麼?並非,好了,傳說中的第三者要出現了。
這時候出現了另外一我的,小六,他也喜歡小王,因而,在小張第一次給那把鎖的時候,悄悄的把鎖換了,換成了本身的鎖。
而後小王覺得是小張給的鎖,因而將本身的鎖和鑰匙放在了盒子裏,而後用小六的鎖鎖上了盒子。
因而乎,你們都知道了,小六用鑰匙打開了盒子,而後把小王鎖和鑰匙拿到本身手裏,放進去了本身的鎖和鑰匙,而後用小張的鎖鎖上盒子。
小張收到了盒子以後,覺得盒子裏的鎖和鑰匙是小王的,因而寫上了 」我愛你「,結果小六拿到以後,把 」我愛你「 換成了 」分手吧「 發給了小王,小王收到後很傷心,就問 」爲啥要分手「,可是小六又把紙條換成了 」那就分手吧「,完蛋,分手了。
這是一個悲傷的故事,那咋辦呢?因而乎,小張發明了一種不能銷燬的小條條(數字證書)貼在鎖上,表示這是我小張的鎖,而後小六就沒辦法偷換鎖了。
數字證書就是咱們上面所說的那個小條條,那麼數字證書如何產生的呢?
首先,咱們須要一個很權威的機構來簽發數字證書給你,咱們稱之爲 CA,這個機構用非對稱加密產生一對密鑰。
而後,私鑰本身藏起來,用本身的私鑰對公鑰進行簽名,生成數字證書,證書文件都有一個明文的部分和密文的部分,明文的部分裏面包含了誰簽發的、簽發給誰、有效期是多少等等信息,而後使用 hash 算法進行計算,獲得一個 hash 值。而後再用私鑰對這個 hash 值進行加密,這就獲得了一個簽名信息。而後把這兩部分合起來,放到數字證書的文件裏,這就是一個數字證書了。
好了,假如說我拿到了一個數字證書,那麼我要如何去驗明他是否正確呢?
首先,咱們找到簽發這個證書的機構,拿到它的公鑰,而後用公鑰去解密密文,獲得 hash 值,接下來,咱們經過一樣的 hash 算法對明文進行 hash 處理,如今咱們就有兩個 hash 值了,咱們比對一下這兩個 hash 值,就知道證書是否正確了。
那麼,咱們從何得知它是否可信呢?我是否是能夠本身給本身發一個證書啊,固然這是不行的,上面說的權威機構,就那麼些公司,這幾個公司的證書被各軟件廠商設置成「可信任的根證書」,而後這幾個根證書能夠去證實其餘的證書。就好比說你爸信任你,你信任你的女友,那麼你爸也就信任你的女友了。而上面說的本身給本身發的證書各廠商固然就不信任了。
這篇文章也只能說個大概,真實狀況更加複雜,記得之前頒發證書使用的非對稱加密算法是 RSA,後面有了解到一種叫 ECC 的加密算法,安全性高,處理速度快,存儲空間佔用小,有篇博客你們能夠看看。
好了,就說到這裏,其實對這方面瞭解的也不是太多,若是有錯誤,望指出改正。
若是各位看官看的還行,能夠到 個人博客倉庫 裏給我一顆小小的 star 支持一下,不勝感激。