天天看點

SSL數字證書之CA根證書、CA中間證書和SSL證書

【前言】

       說一下大背景吧,我們的一個背景服務需要部署在一個沒法上外網的環境,但是我們的背景服務需要通路七牛雲進行對象存儲,于是乎,需要一個代理來完成這個通路,我門采用nginx七層來做這個代理,因為七牛通路是https,那麼必然就需要自簽證書咯。然後就開始吭哧吭哧造自簽證書(具體簽發過程請移步這裡:基于openssl的ca建立及證書簽發)。

       造完根證書以及中間證書後,問題就來了,我在代理和背景服務放置的都是中間證書,于是乎就一直報錯無法驗證證書。說來真是慚愧,起初我一直自以為是的認為是代碼的問題,雖然看背景服務日志确實有個報錯,但是在浏覽器通路的時候傳回的資訊是證書驗證不通過。我一直和開發同學強調大機率是他們代碼錯誤,最後在他們團隊leader耐心的和我一起進行調試後,發現我應該把簽發的根證書放到背景服務所在機器,我們的背景服務需要讀取(用攜帶一詞或許更合适一點)這個根證書去和代理進行互動。

       總的來說,就是背景服務就好比我們的浏覽器,我們通過浏覽器去通路某個https的網站,浏覽器本身是内置了對應的根證書的,那麼你想想,我們的背景服務是不是也應該要内置這些對應的根證書呢?是不是突然就猶如醍醐灌頂,茅塞頓開了。之後我把自簽的根證書替換到背景服務後,問題果然得到解決。

       複盤整個過程,仔細回味一下,為什麼背景服務需要攜帶這個根證書去和代理端進行互動驗證呢?換句話說,為什麼浏覽器需要内置根證書去驗證要通路的https呢?那麼ssl證書是什麼?ca中間根證書是什麼?ca根證書又是什麼東西呢?請聽我細細道來.......

【ssl證書】

百度曰:ssl證書是遵守 ssl協定,由受信任的數字證書頒發機構ca,在驗證伺服器身份後頒發,具有伺服器身份驗證和資料傳輸加密功能的證書。

      這些是我個人的相關了解

對https的思考之https如何做到資料傳輸安全的呢?

https建立連接配接詳細過程

其實我個人感覺人們常常是将ssl證書稱之為ca證書,也有稱之為server證書的,說到底就是ca中心簽發的一個可信的證書。

【ca中間證書是什麼】

       中間二字早已表明它的身份,它是介于ssl證書和ca根證書中間的一個東西。試想一下,如果用ca根證書直接簽發ssl證書,如果發生了錯誤,或者說要取消掉root,那麼用這個根證書簽名的所有證書都将變為不可信。是以,根證書用自己的私鑰對中間證書進行簽名,這個時候中間證書變為可信證書了。中間根又可以給另一個中間根進行簽名,這個被中間根簽名的新中間根同樣可以用來簽署ssl證書。

【ca根證書到底是什麼】

百度曰:根證書是未被簽名的公鑰證書或自簽名的證書。

       我們來了解下浏覽器是如何來信任一個https網站的tls證書的。首先我們要知道,證書(後文稱之為證書a)中的内容有使用者的資訊、公鑰以及ca中心的簽名。那麼問題來了,我們如何确定這個ca組織的簽名是否可信呢?顯然需要用到這個ca中心的公鑰,那麼這個公鑰又要從哪裡擷取呢?當然是從包含有ca中心公鑰的那份證書(後文稱之為證書b)中擷取。下載下傳了證書b後,問題又來了,如何驗證證書b又是可信的呢?于是又要用簽發證書b的證書c來驗證這個證書b是可信的。

這個時候你會發現,這似乎是一個死循環,一層層嵌套,人們還給它取了一個有趣的名字:證書鍊。或許你會想,都死循環了,那還玩犢子啊。顯然不是這樣,證書鍊是有終結的,你想啊,如果我不用别人給我簽名的證書,我自己給自己簽名,那麼是不是就不需要上一層證書的驗證呢?對的,這個證書鍊的頂端就是這麼個自己給自己簽名的證書,稱之為根證書,俗稱自簽證書。當年擁有了這個根證書(這裡我稱之為一級證書),就表明你會信任它簽發的所有證書(這裡我稱之為二級證書),當然也會信任被二級證書簽發的三級證書、被三級證書簽發的四級證書......是不是突然想起一句古文“子又生孫,孫又生子;子又有子,子又有孫”,從這個一層層簽發來看,确實是這麼回事。

一句話總結,根證書是ca中心給自己簽名的證書,是證書鍊的起點,安裝根證書,就是信任此ca中心。

SSL數字證書之CA根證書、CA中間證書和SSL證書

繼續閱讀