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证书的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么把PDF转换成Excel文件?分享两
- 下一篇: java对接支付宝支付(手机网站支付)