資料在浏覽器和伺服器之間傳輸時,有可能在傳輸過程中被冒充的盜賊把内容替換了,那麼如何保證資料是真實伺服器發送的而不被調包呢,同時如何保證傳輸的資料沒有被人篡改呢,要解決這兩個問題就必須用到數字簽名,數字簽名就如同日常生活的中的簽名一樣,一旦在合同書上落下了你的大名,從法律意義上就确定是你本人簽的字兒,這是任何人都沒法仿造的,因為這是你專有的手迹,任何人是造不出來的。那麼在計算機中的數字簽名怎麼回事呢?數字簽名就是用于驗證傳輸的内容是不是真實伺服器發送的資料,發送的資料有沒有被篡改過,它就幹這兩件事,是非對稱加密的一種應用場景。不過他是反過來用私鑰來加密,通過與之配對的公鑰來解密。
第一步:服務端把封包經過Hash處理後生成摘要資訊Digest,摘要資訊使用私鑰private-key加密之後就生成簽名,伺服器把簽名連同封包一起發送給用戶端。
第二步:用戶端接收到資料後,把簽名提取出來用public-key解密,如果能正常的解密出來Digest2,那麼就能确認是對方發的。
第三步:用戶端把封包Text提取出來做同樣的Hash處理,得到的摘要資訊Digest1,再與之前解密出來的Digist2對比,如果兩者相等,就表示内容沒有被篡改,否則内容就是被人改過了。因為隻要文本内容哪怕有任何一點點改動都會Hash出一個完全不一樣的摘要資訊出來。
數字證書簡稱CA,它由權威機構給某網站頒發的一種認可憑證,這個憑證是被大家(浏覽器)所認可的,為什麼需要用數字證書呢,難道有了數字簽名還不夠安全嗎?有這樣一種情況,就是浏覽器無法确定所有的真實伺服器是不是真的是真實的,舉一個簡單的例子:A廠家給你們家安裝鎖,同時把鑰匙也交給你,隻要鑰匙能打開鎖,你就可以确定鑰匙和鎖是配對的,如果有人把鑰匙換了或者把鎖換了,你是打不開門的,你就知道肯定被竊取了,但是如果有人把鎖和鑰匙替換成另一套表面看起來差不多的,但品質差很多的,雖然鑰匙和鎖配套,但是你卻不能确定這是否真的是A廠家給你的,那麼這時候,你可以找質檢部門來檢驗一下,這套鎖是不是真的來自于A廠家,質檢部門是權威機構,他說的話是可以被公衆認可的(呵呵)。
同樣的, 因為如果有人(張三)用自己的公鑰把真實伺服器發送給浏覽器的公鑰替換了,于是張三用自己的私鑰執行相同的步驟對文本Hash、數字簽名,最後得到的結果都沒什麼問題,但事實上浏覽器看到的東西卻不是真實伺服器給的,而是被張三從裡到外(公鑰到私鑰)換了一通。那麼如何保證你現在使用的公鑰就是真實伺服器發給你的呢?我們就用數字證書來解決這個問題。數字證書一般由數字證書認證機構(Certificate Authority)頒發,證書裡面包含了真實伺服器的公鑰和網站的一些其他資訊,數字證書機構用自己的私鑰加密後發給浏覽器,浏覽器使用數字證書機構的公鑰解密後得到真實伺服器的公鑰。這個過程是建立在被大家所認可的證書機構之上得到的公鑰,是以這是一種安全的方式。
知乎上面相關聯問題解答:https://www.zhihu.com/question/52493697