來自公眾號:車小胖談網路
問題描述
網站使用自簽名證書,如果瀏覽器端不信任證書,如何交換對稱密碼?
我想諮詢一下,關於網頁使用自簽名證書,如果使用者在瀏覽器沒有選擇信任網站的證書,會如何進行對稱秘鑰的交換?這個時候是明文交換對稱秘鑰嗎?
正文
什麼是證書?
每一個成年人都有一張身份證,這個身份證就是一張證書,以用來證明每個公民的身份。
身份證裡有一塊迷你晶片,儲存著身份證的資訊,為了防止被篡改,通常儲存的內容有防寫措施。換句話說,身份證裡的資訊只能讀取不能寫入。
為了防止偽造,可以使用公安系統的私鑰,對身份證資訊進行簽名。
公民的身份可以讓公安局來證明,那公安局的身份誰來證明?
公安局使用自簽名證書,那什麼是自簽名證書?
顧名思義,就是自己證明自己的證書,用自己的私鑰給自己的證書簽名。
邏輯不對啊,自簽名證書,怎麼證明他就是公安局的呢?
公安局的身份無法證明,公安局的身份基於信任!
你不信不要緊,只要銀行信任他就行了。
銀行如何信任公安局的自簽名證書?
只要預先安裝在銀行系統的電腦裡,準確地說,把公安局的自簽名證書複製到電腦的證書倉庫裡,就是信任公安局的自簽名證書了。
自簽名證書裡都有啥?
如圖所示,這個就是自簽名證書,證書的頒發者與證書的使用者相同,除了自簽名部分是私鑰加密的,其它部分全部為明文,包括公鑰也是明文。
當櫃員拿到小明的身份證,透過讀卡器讀出晶片中的公安局的簽名(公安局私鑰加密),然後根據到證書倉庫裡搜尋,找到公安局的自簽名證書,如上圖所示,用明文的公鑰嘗試解密簽名,解得開,證明這張身份證確實是公安局頒發的,可以繼續讀取身份證的其它資訊。解不開,說明是偽造的。
讀者只要將上文裡的公安局用CA替換掉,就可以用這個故事來嘗試理解目前網際網路的數字證書的認證原理。
什麼是CA?
CA就是類似公安局的證書頒發機構,他們的身份已經被作業系統信任了,並安裝在證書的倉庫裡。
什麼是根證書?
CA通常使用自簽名證書,被作業系統信任了,他們就是根證書,因為他們是證書鏈的最頂端,其它的二級證書、三級證書,都是他們的孩子、孫子,所以這些自簽名證書稱自己為根(Root)證書,是非常形象的。
三級證書由二級證書機構頒發,二級證書由根證書頒發,根證書由作業系統信任,這個就是數字證書的信任鏈條。
寫完背景知識,再來回答這個問題就非常簡單了。
瀏覽器沒有信任證書?
這個說法不是很恰當,準確的說,是網站的自簽名證書沒有複製到瀏覽器所在電腦的數字證書倉庫裡。當伺服器將自己的自簽名證書提交給瀏覽器審查時,瀏覽器無法在倉庫裡搜尋到,所以瀏覽器無法校驗對方的證書是否真實有效。
當無法校驗對方證書(Certificate Verify)時,瀏覽器傳送Alert報文報錯(Fatal Error),致命性的錯誤,然後連線斷開。
網站如何使用自簽名證書?
一些銀行早期曾使用過自簽名證書,需要使用者訪問他們的http網站,先行下載並安裝自簽名證書,相當於信任了這些自簽名的證書,然後就可以透過https訪問網銀了。
隨意安裝自簽名的證書的安全風險大,一個機構如果將自己的根證書(自簽名證書)潛伏在使用者證書倉庫裡,隨後頒發任何虛假證書,瀏覽器都會相信並與之建立安全加密通訊,而使用者壓根覺察不到任何異常,這是很危險的!
朋友會在“發現-看一看”看到你“在看”的內容