數字簽名、數字證書、SSL、https是什麼關係?

1、 訪問淘寶
2、 淘寶要求我安裝數字證書
3、 安裝完數字證書後,我會發一個隨機串給伺服器,讓其加密 (讓他簽名嗎?)
4、 伺服器把加密過的隨機串(這步就叫做數字簽名嗎?)發給我
5、 我會用數字證書中的公鑰解密出字元串,如果和我相同,則證明該網站是可信的
6、 後面我會生成一個對稱加密的演算法和秘鑰,把剛生成的秘鑰用公鑰加密發給伺服器進行後面的通信
上面這6步是正確的嗎?
求大神再給我講講SSL在實際中的應用


接上回,馬老闆讓手下陰差陽錯買了肯德基,這次又想買點東西,但難以啟齒,所以悄悄給手下耳語了一番,手下連連稱是,並狂拍胸脯口出豪言:馬總,放心,這事包在我身上,一定出色完成任務!

手下打開瀏覽器輸入:https://某寶.com,敲回車鍵,接下來發生一連串的連鎖反應。

第一步:瀏覽器與某寶建立TCP連接

第二步:伺服器會彈出一個頁面提醒安裝數字證書,如果不安裝,接下來一切都不會順利進行

第三步:瀏覽器需要認證某寶是真實的伺服器(不是山寨的),伺服器發來了自己的數字證書

插一句:某寶的數字證書從哪裡來?

某寶自己的認證中心簡稱CA(Certificate Authority),CA給某寶頒發了一個證書,這個證書有:

簽發者

證書用途

某寶的公鑰

某寶的加密演算法

某寶用的HASH演算法

證書的到期時間等

如果證書就這樣給某寶了,那傳輸過程中如果有人篡改這個證書,那這個證書還有什麼權威性?簡單的很,把以上內容做一次HASH,得到一個固定長度(比如128位的HASH,然後再用CA的私鑰加密,就得到了數字簽名,附在以上證書的末尾,一起傳輸給某寶。

設想一下,如果不加密那個HASH,任何人都可以先篡改證書,然後再計算HASH,附在證書的後面,傳給某寶時,某寶無法發現是否有人篡改過。而用CA私鑰加密後,就生成了類似人體指紋的簽名,任何篡改證書的嘗試,都會被數字簽名發現。

第四步:瀏覽器接到某寶的數字證書,從第二步得到的CA公鑰值,可以解密數字證書末尾的數字簽名(CA私鑰加密,可以用CA公鑰解密,此為非對稱加密),得到原始的HASHs

然後自己也按照證書的HASH演算法,自己也計算一個HASHc,如果HASHc== HASHs,則認證通過,否則認證失敗。假設認證成功,否則故事無法編下去了…

第五步:雙方會運行 Diffie Hellman 演算法,簡稱 DH演算法。通俗地說:雙方會協商一個master-key,這個master-key 不會在網路上傳輸、交換,它們獨立計算出來的,其值是相同的,只有它們自己雙方知道,任何第三方不會知道,俗稱的天不知,地不知,你知,我知。

然後以master-key推導出 session-key,用於雙方SSL數據流的加密/解密,採用對稱加密,保證數據不被偷窺,加密演算法一般用AES。

以master-key推導出 hash-key,用於數據完整性檢查(Integrity Check Verification)的加密密鑰,HASH演算法一般有:MD5、SHA,通俗滴說,保證數據不被篡改。

第六步:然後就可以正常發送訂單了,用HASH key 生成一個MAC( Message Authentication Code),附在HTTP報文的後面,然後用session key 加密所有數據(HTTP + MAC),然後發送出去

第七步:伺服器先用session key 解密數據,得到HTTP + MAC,然後自己用相同的演算法計算自己的MAC,如果兩個MAC相等,則數據沒有被篡改。

第八步:所有購物安全無誤地完成,手下給馬老闆買了一件神秘禮物,一件COS Play裝

馬老闆臉僵了五秒鐘,隨即綻開了笑容,說了一句:也蠻好…


理解HTTPS前需要理解這些概念:明文、密文、密碼、密鑰、對稱加密、非對稱加密、摘要、數字簽名、數字證書

密碼(cipher)

密碼學中的密碼(cipher)和我們日常生活中所說的密碼不太一樣,計算機術語『密碼 cipher』是一種用於加密或者解密的演算法,而我們日常所使用的『密碼 password』是一種口令,它是用於認證用途的一組文本字元串,這裡我們要討論的是前者:cipher。

密鑰(key)

密鑰是一種參數,它是在使用密碼(cipher)演算法過程中輸入的參數。同一個明文在相同的密碼演算法和不同的密鑰計算下會產生不同的密文。很多知名的密碼演算法都是公開的,密鑰才是決定密文是否安全的重要參數,通常密鑰越長,破解的難度越大,比如一個8位的密鑰最多有256種情況,使用窮舉法,能非常輕易的破解,知名的DES演算法使用56位的密鑰,目前已經不是一種安全的加密演算法了,主要還是因為56位的密鑰太短,在數小時內就可以被破解。密鑰分為對稱密鑰與非對稱密鑰。

明文/密文

明文(plaintext)是加密之前的原始數據,密文是通過密碼(cipher)運算後得到的結果成為密文(ciphertext)

對稱密鑰

對稱密鑰(Symmetric-key algorithm)又稱為共享密鑰加密,對稱密鑰在加密和解密的過程中使用的密鑰是相同的,常見的對稱加密演算法有DES、3DES、AES、RC5、RC6。對稱密鑰的優點是計算速度快,但是他也有缺點,密鑰需要在通訊的兩端共享,讓彼此知道密鑰是什麼對方才能正確解密,如果所有客戶端都共享同一個密鑰,那麼這個密鑰就像萬能鑰匙一樣,可以憑藉一個密鑰破解所有人的密文了,如果每個客戶端與服務端單獨維護一個密鑰,那麼服務端需要管理的密鑰將是成千上萬,這會給服務端帶來噩夢

非對稱密鑰

非對稱密鑰(public-key cryptography),又稱為公開密鑰加密,服務端會生成一對密鑰,一個私鑰保存在服務端,僅自己知道,另一個是公鑰,公鑰可以自由發布供任何人使用。客戶端的明文通過公鑰加密後的密文需要用私鑰解密。非對稱密鑰在加密和解密的過程的使用的密鑰是不同的密鑰,加密和解密是不對稱的,所以稱之為非對稱加密。與對稱密鑰加密相比,非對稱加密無需在客戶端和服務端之間共享密鑰,只要私鑰不發給任何用戶,即使公鑰在網上被截獲,也無法被解密,僅有被竊取的公鑰是沒有任何用處的。常見的非對稱加密有RSA,非對稱加解密的過程:

  1. 服務端生成配對的公鑰和私鑰
  2. 私鑰保存在服務端,公鑰發送給客戶端
  3. 客戶端使用公鑰加密明文傳輸給服務端
  4. 服務端使用私鑰解密密文得到明文

數字簽名(Digital Signature)

數據在瀏覽器和伺服器之間傳輸時,有可能在傳輸過程中被冒充的盜賊把內容替換了,那麼如何保證數據是真實伺服器發送的而不被調包呢,同時如何保證傳輸的數據沒有被人篡改呢,要解決這兩個問題就必須用到數字簽名,數字簽名就如同日常生活的中的簽名一樣,一旦在合同書上落下了你的大名,從法律意義上就確定是你本人簽的字兒,這是任何人都沒法仿造的,因為這是你專有的手跡,任何人是造不出來的。那麼在計算機中的數字簽名怎麼回事呢?數字簽名就是用於驗證傳輸的內容是不是真實伺服器發送的數據,發送的數據有沒有被篡改過,它就干這兩件事,是非對稱加密的一種應用場景。不過他是反過來用私鑰來加密,通過與之配對的公鑰來解密。

第一步:服務端把報文經過Hash處理後生成摘要信息Digest,摘要信息使用私鑰private-key加密之後就生成簽名,伺服器把簽名連同報文一起發送給客戶端。

第二步:客戶端接收到數據後,把簽名提取出來用public-key解密,如果能正常的解密出來Digest2,那麼就能確認是對方發的。
第三步:客戶端把報文Text提取出來做同樣的Hash處理,得到的摘要信息Digest1,再與之前解密出來的Digist2對比,如果兩者相等,就表示內容沒有被篡改,否則內容就是被人改過了。因為只要文本內容哪怕有任何一點點改動都會Hash出一個完全不一樣的摘要信息出來。

數字證書(Certificate Authority)

數字證書簡稱CA,它由權威機構給某網站頒發的一種認可憑證,這個憑證是被大家(瀏覽器)所認可的,為什麼需要用數字證書呢,難道有了數字簽名還不夠安全嗎?有這樣一種情況,就是瀏覽器無法確定所有的真實伺服器是不是真的是真實的,舉一個簡單的例子:A廠家給你們家安裝鎖,同時把鑰匙也交給你,只要鑰匙能打開鎖,你就可以確定鑰匙和鎖是配對的,如果有人把鑰匙換了或者把鎖換了,你是打不開門的,你就知道肯定被竊取了,但是如果有人把鎖和鑰匙替換成另一套表面看起來差不多的,但質量差很多的,雖然鑰匙和鎖配套,但是你卻不能確定這是否真的是A廠家給你的,那麼這時候,你可以找質檢部門來檢驗一下,這套鎖是不是真的來自於A廠家,質檢部門是權威機構,他說的話是可以被公眾認可的(呵呵)。

同樣的, 因為如果有人(張三)用自己的公鑰把真實伺服器發送給瀏覽器的公鑰替換了,於是張三用自己的私鑰執行相同的步驟對文本Hash、數字簽名,最後得到的結果都沒什麼問題,但事實上瀏覽器看到的東西卻不是真實伺服器給的,而是被張三從裡到外(公鑰到私鑰)換了一通。那麼如何保證你現在使用的公鑰就是真實伺服器發給你的呢?我們就用數字證書來解決這個問題。數字證書一般由數字證書認證機構(Certificate Authority)頒發,證書裡面包含了真實伺服器的公鑰和網站的一些其他信息,數字證書機構用自己的私鑰加密後發給瀏覽器,瀏覽器使用數字證書機構的公鑰解密後得到真實伺服器的公鑰。這個過程是建立在被大家所認可的證書機構之上得到的公鑰,所以這是一種安全的方式。


水一貼(主要用來知識記錄)
數字證書及CA的掃盲介紹_知識庫_博客園
  先說一個通俗的例子

  考慮到證書體系的相關知識比較枯燥、晦澀。俺先拿一個通俗的例子來說事兒。

◇ 普通的介紹信

  想必大伙兒都聽說過介紹信的例子吧?假設 A 公司的張三先生要到 B 公司去拜訪,但是 B 公司的所有人都不認識他,他咋辦捏?常用的辦法是帶公司開的一張介紹信,在信中說:茲有張三先生前往貴公司辦理業務,請給予接洽......云云。然後在信上敲上A公司的公章。

  張三先生到了 B 公司後,把介紹信遞給 B 公司的前台李四小姐。李小姐一看介紹信上有 A 公司的公章,而且 A 公司是經常和 B 公司有業務往來的,這位李小姐就相信張先生不是歹人了。

  說到這,愛抬杠的同學會問了:萬一公章是偽造的,咋辦捏?在此,俺要先聲明,在本例子中,先假設公章是難以偽造的,否則俺的故事沒法說下去鳥。

◇ 引入中介機構的介紹信

  好,回到剛才的話題。如果和 B 公司有業務往來的公司很多,每個公司的公章都不同,那前台就要懂得分辨各種公章,非常滴麻煩。所以,有某個中介公司 C,發現了這個商機。C公司專門開設了一項「代理公章」的業務。

  今後,A 公司的業務員去 B 公司,需要帶2個介紹信:

  介紹信1

  含有 C 公司的公章及 A 公司的公章。並且特地註明:C 公司信任 A 公司。

  介紹信2

  僅含有 A 公司的公章,然後寫上:茲有張三先生前往貴公司辦理業務,請給予接洽......云云。

  某些不開竅的同學會問了,這樣不是增加麻煩了嗎?有啥好處捏?

  主要的好處在於,對於接待公司的前台,就不需要記住各個公司的公章分別是啥樣子的;他/她只要記住中介公司 C 的公章即可。當他/她拿到兩份介紹信之後,先對介紹信1的 C 公章,驗明正身;確認無誤之後,再比對介紹信1和介紹信2的兩個 A 公章是否一致。如果是一樣的,那就可以證明介紹信2是可以信任的了。

   相關專業術語的解釋

  費了不少口水,終於說完了一個俺自認為比較通俗的例子。如果你聽到到這,還是想不明白這個例子在說啥,那後續的內容,就不必浪費時間聽了 :(

  下面,俺就著上述的例子,把相關的名詞,作一些解釋。

◇ 什麼是證書?

  「證書」洋文也叫「digital certificate」或「public key certificate」(專業的解釋看「這裡」)。

  它是用來證明某某東西確實是某某東西的東西(是不是像繞口令?)。通俗地說,證書就好比例子裡面的公章。通過公章,可以證明該介紹信確實是對應的公司發出的。

  理論上,人人都可以找個證書工具,自己做一個證書。那如何防止壞人自己製作證書出來騙人捏?請看後續 CA 的介紹。

◇ 什麼是CA?

  CA是Certificate Authority的縮寫,也叫「證書授權中心」。(專業的解釋看「這裡」)

  它是負責管理和簽發證書的第三方機構,就好比例子裡面的中介——C 公司。一般來說,CA必須是所有行業和所有公眾都信任的、認可的。因此它必須具有足夠的權威性。就好比A、B兩公司都必須信任C公司,才會找 C 公司作為公章的中介。

◇ 什麼是CA證書?

  CA 證書,顧名思義,就是CA頒發的證書。

  前面已經說了,人人都可以找工具製作證書。但是你一個小破孩製作出來的證書是沒啥用處的。因為你不是權威的CA機關,你自己搞的證書不具有權威性。

  這就好比上述的例子里,某個壞人自己刻了一個公章,蓋到介紹信上。但是別人一看,不是受信任的中介公司的公章,就不予理睬。壞蛋的陰謀就不能得逞啦。

  文本後續提及的證書,若無特殊說明,均指 CA 證書。

◇ 什麼是證書之間的信任關係?

  在俺的例子里談到,引入中介後,業務員要同時帶兩個介紹信。第一個介紹信包含了兩個公章,並註明,公章C信任公章A。證書間的信任關係,就和這個類似。就是用一個證書來證明另一個證書是真實可信滴。

◇ 什麼是證書信任鏈?

  實際上,證書之間的信任關係,是可以嵌套的。比如,C 信任 A1,A1 信任 A2,A2 信任 A3......這個叫做證書的信任鏈。只要你信任鏈上的頭一個證書,那後續的證書,都是可以信任滴。

◇ 什麼是根證書?

  「根證書」的洋文叫「root certificate」,專業的解釋看「這裡」。為了說清楚根證書是咋回事,再來看個稍微複雜點的例子。

  假設 C 證書信任 A 和 B;然後 A 信任 A1 和 A2;B 信任 B1 和 B2。則它們之間,構成如下的一個樹形關係(一個倒立的樹)。

  處於最頂上的樹根位置的那個證書,就是「根證書」。除了根證書,其它證書都要依靠上一級的證書,來證明自己。那誰來證明「根證書」可靠捏?實際上,根證書自己證明自己是可靠滴(或者換句話說,根證書是不需要被證明滴)。

  聰明的同學此刻應該意識到了:根證書是整個證書體系安全的根本。所以,如果某個證書體系中,根證書出了問題(不再可信了),那麼所有被根證書所信任的其它證書,也就不再可信了。這個後果是相當相當滴嚴重(簡直可以說是災難性的),具體在下一個帖子里介紹。

  證書有啥用?

  CA 證書的作用有很多,俺為了節省口水,只列出常用的幾個。

◇ 驗證網站是否可信(針對HTTPS)

  通常,我們如果訪問某些敏感的網頁(比如用戶登錄的頁面),其協議都會使用 HTTPS 而不是 HTTP。因為 HTTP 協議是明文的,一旦有壞人在偷窺你的網路通訊,他/她就可以看到網路通訊的內容(比如你的密碼、銀行帳號、等);而 HTTPS 是加密的協議,可以保證你的傳輸過程中,壞蛋無法偷窺。

  但是,千萬不要以為,HTTPS 協議有了加密,就可高枕無憂了。俺再舉一個例子來說明,光有加密是不夠滴。假設有一個壞人,搞了一個假的網銀的站點,然後誘騙你上這個站點。假設你又比較單純,一不留神,就把你的帳號,口令都輸入進去了。那這個壞蛋的陰謀就得逞鳥。

  為了防止壞人這麼干,HTTPS 協議除了有加密的機制,還有一套證書的機制。通過證書來確保,某個站點確實就是某個站點。

  有了證書之後,當你的瀏覽器在訪問某個 HTTPS 網站時,會驗證該站點上的 CA 證書(類似於驗證介紹信的公章)。如果瀏覽器發現該證書沒有問題(證書被某個根證書信任、證書上綁定的域名和該網站的域名一致、證書沒有過期),那麼頁面就直接打開;否則的話,瀏覽器會給出一個警告,告訴你該網站的證書存在某某問題,是否繼續訪問該站點?為了形象起見,下面給出 IE 和 Firefox 的抓圖:

  大多數知名的網站,如果用了 HTTPS 協議,其證書都是可信的(也就不會出現上述警告)。所以,今後你如果上某個知名網站,發現瀏覽器跳出上述警告,你就要小心啦!

◇ 驗證某文件是否可信(是否被篡改)

  證書除了可以用來驗證某個網站,還可以用來驗證某個文件是否被篡改。具體是通過證書來製作文件的數字簽名。製作數字簽名的過程太專業,咱就不說了。後面專門告訴大家如何驗證文件的數字簽名。考慮到大多數人用 Windows 系統,俺就拿 Windows 的例子來說事兒。

  比如,俺手頭有一個 Firefox 的安裝文件(帶有數字簽名)。當俺查看該文件的屬性,會看到如下的界面。眼神好的同學,會注意到到上面有個「數字簽名」的標籤頁。如果沒有出現這個標籤頁,就說明該文件沒有附帶數字簽名。

  選擇該標籤頁,看到如下界面。

  順便說一下,某些數字簽名中沒有包含「郵件地址」,那麼這一項會顯示「不可用」;同樣的,某些數字簽名沒有包含「時間戳」,也會顯示「不可用」。不要緊張,這裡顯示的「不可用」跟數字簽名的有效性沒關係

  一般來說,簽名列表中,有且僅有一個簽名。選中它,點「詳細信息」按鈕。跳出如下界面:

  通常這個界面會顯示一行字:「該數字簽名正常」(圖中紅圈標出)。如果有這行字,就說明該文件從出廠到你手裡,中途沒有被篡改過(是原裝滴、是純潔滴)。

  如果該文件被篡改過了(比如,感染了病毒、被注入木馬),那麼對話框會出現一個警告提示「該數字簽名無效」(圖中紅圈標出)。界面如下:

  不論簽名是否正常,你都可以點「查看證書」按鈕。這時候,會跳出證書的對話框。如下:

  從後一個界面,可以看到俺剛才說的證書信任鏈。圖中的信任鏈有3層:

  第1層是根證書(Thawte Premium Server CA)。

  第2層是 Thawte 專門用來簽名的證書。

  第3層是 Mozilla 自己的證書。

  目前大多數知名的公司(或組織機構),其發布的可執行文件(比如軟體安裝包、驅動程序、安全補丁),都帶有數字簽名。你可以自己去看一下。

  建議大伙兒在安裝軟體之前,都先看看是否有數字簽名?如果有,就按照上述步驟驗證一把。一旦數字簽名是壞的,那可千萬別裝。

總結

  費了半天口舌,大致介紹了 CA 證書相關的概念。想更深入了解這方面知識的同學,可以找些信息安全或密碼學方面的資料,繼續鑽研。


我覺得你可能首先需要理解證書和鑰匙,這樣就會比較容易了。

這裡為了簡化,把"你的設備"和 "你"這組概念稱作client,因為你是客戶,要發起請求。
而淘寶在這裡是server,伺服器來響應你的請求。
你的證書就是用來證明你是誰的東西,裡面包含了你的公鑰(public key),issuer的信息,比如這裡你的證書就是淘寶發的,issuer就是淘寶啦。你自己(subject)的一些信息,比如client的CN(common name)。
所以當你打開你的設備打開淘寶的網址的時候,實際上有這麼幾個過程:

1. 打招呼 (client hello和server hello)
就是你和淘寶互相問好啦,你說你是你,拿出你的證書,淘寶說他是淘寶,拿出自己的證書。
前面說過,你的證書是淘寶發的,所以淘寶很容易就知道你是你了,然而你怎麼知道這個網站不是釣魚網站而是真的淘寶呢,這就涉及另一個概念CA(certificate authorities)。
CA就相當於一個權威機構,淘寶的證書是他發的,你安裝了CA root證書之後呢,通過看淘寶給你的證書里的issuer信息就可以知道淘寶的證書是不是真的了。
打招呼的過程還包括一些簡單的交涉,比如你們決定用什麼cipher用什麼protocol。

2. 換鑰匙(key exchange)
前面說了你和淘寶各有自己的私鑰和公鑰,你們通過打招呼換證書拿到了對方的公鑰,這個時候還需要另一對鑰匙,因為這一對一模一樣的鑰匙就是你這次訪問淘寶的時候用來加密自己的信息的了。
可能有人會問為什麼我們不可以Bob和Alice一樣,用對方的公鑰加密,用自己的私鑰解密呢。因為這樣(asymmetric encryption)一來比較慢,二來比較不安全。而key exchabge的好處在這兒就是,每次都會是新的,就不存在泄漏的危險了。而且對稱加密也比較快。

3. 真正的溝通
這時你們就是在https裡面正常的溝通了。SSL是個用途很廣泛也比較方便的協議,比如加在普通的http上成為https,ftp加上ssl變成ftps,或者直接在tcp上,很多伺服器會為了高效簡便用自己的協議和信息格式,但都會在這之上用ssl來確保一個埠到另一個埠的服務的安全性。

以上手機打字可能有小疏漏,但希望對你有幫助。


  1. 數字簽名的作用是確保發送的消息沒有被篡改
  2. 數字證書的作用是由第三方(權威機構)頒發的,用於驗證通信實體身份。

從作用再去思考https或其他套了層ssl的通信會很有幫助。
具體通信過程見車總的答案
數字簽名、數字證書、SSL、https是什麼關係? - 車小胖的回答 - 知乎


簽名的含義就是我對這個事負責,比如借錢時你得在借款單上簽名吧,以後就不好否認了

那數字簽名本質就是要干這個事,你發了一個郵件出去,或者寫了一個文檔,如果能簽個名那接收方就會放心一些。
怎麼數字簽名?

  1. 使用到了非對稱加密演算法
  2. 你自己持有一個私鑰,並公開相對應的公鑰
  3. 把你要簽名的數據(郵件/文檔/其他...)用摘要演算法算出一個摘要,用你的私鑰對該摘要進行加密,這就是所謂的數字簽名
  4. 接收方接收到數據及其簽名,用你的公鑰解密這個簽名,得到摘要,並用同樣的摘要演算法對原始數據計算出摘要,如果一致,接收方就認為這個原始數據
    1. 的確是你發送滴:由於只有你才擁有私鑰,所以只要這個簽名和原數據吻合,你就無法否認該數據是你發送滴
    2. 沒有被篡改過:如果被篡改過,那麼簽名就不能和原數據吻合了

那麼,數字證書是神馬?

  1. 證明你就是你
  2. 攜帶你的公鑰

為什麼要證明你是你?實際上日常生活里我們經常要用各種證件來做這個自我證明,例如參加高考就得有個准考證。

那在數字的世界裡也不例外,比如我發個郵件給你,說我是馬化騰,我們決定了要你來做騰訊的CEO,你嗤之以鼻,然後你再一看郵件簽名:我靠,是verisign簽發的數字證書,證明該郵件是騰訊董事局主席馬化騰簽發的,你還能淡定嗎?

這裡其實有個很重要的概念,就是CA,也就是verisign的角色,怎麼理解它?


比如我說我是馬化騰,你說,你證明給我看。我掏出我的身份證,你一看,深圳市公安局簽發的,姓名馬化騰,民族漢,地址騰訊大廈,果然是騰訊掌門人。。。為什麼現在你相信我了?實際上你是相信深圳公安局,既然深圳公安局說我是馬化騰,你就把我當作馬化騰


CA就是這麼個角色,在數字世界裡,他說我是馬化騰,你就得相信。。。因為他給我發證是很嚴肅的,他會有一系列手段來檢查我是不是某個人(或機構/組織/企業)

那麼verisign就是當前很權威的一個CA,大家都認可他發的證書


所以,數字證書可以證明我的身份。另外,數字證書還可以攜帶我的公鑰,這也很好理解,一個公鑰沒幾個位元組,而數字證書本質上就是一串二進位的數據,其中某個特定區域存放的就是公鑰。


你也許會說,難道我不能偽造一個數字證書?實際上如果你想偽造verisign簽發的數字證書很難,我琢磨著比你偽造一個中華人民共和國身份證還要難,所以還是別指望了吧


那麼支付寶給你安裝的數字證書是verisign簽發的嗎?應該不是,畢竟verisign簽發證書很貴滴,所以他用的是自簽發的方式,也就是說,這個CA他自己做了


這個很容易理解,身份證的確只有公安局才能發,那我不用身份證就不能證明自己了?比如,我去公司附近的小餐館吃飯,只要出示工牌就可以打8折,我進公司的停車場,同樣出示工牌就行了。


只要淘寶認可支付寶的CA地位,那麼你在淘寶網就可以用支付寶自簽發的證書,這樣對於支付寶來說就省了不少錢了


當然,這樣其實對於整個淘寶系風險是很大的,任何一家CA都有一個根證書,身份證有很多的高科技用來防偽,而數字證書要防偽就只有依靠其根證書(或者根證書籤發的下級證書)來簽名,所以這個根證書一旦泄漏不堪設想。。。verisign對於根證書的保護措施肯定是密不透風的(實際上,保護的是證書里的公鑰對應的私鑰,這個私鑰幾百個位元組,也許每個位元組都存儲在不同的伺服器里,每個伺服器在不同的城市),要做到這個可是成本相對高滴,那麼支付寶作為CA就面臨著根證書泄漏的風險。


至於SSL,其實就是依賴非對稱和對稱演算法的一種網路通信協議棧,它通過非對稱演算法來加密傳輸一個對稱演算法加解密的密鑰,然後用這個密鑰來加密/解密傳輸的數據。


https是在SSL之上的http協議,一般只要求服務端有證書即可,當然也可以要求客戶端和服務端都有證書

  1. 若只有伺服器證書,那就是表示,這個網站由CA來擔保,的確是我的,不是個釣魚網站
  2. 若既有伺服器證書,也有客戶端證書,那就表示,客戶端的確是某個用戶而不是另一個用戶,具體到支付寶的個人證書來說,就算你的支付寶密碼被人猜出來了,但是這個人木有你的證書,他還是不能用你的支付寶來付款

所以,在你的電腦上安裝支付寶個人證書一定要謹慎,不要在多人使用的電腦上安裝,只在你一個人可以用的電腦上安裝。


數字簽名,就是用自己的私鑰對一些信息進行加密


打個比方,我在網上問你借錢,為了證明我的身份,我寫了一張借據發給你,並用自己的私鑰來加密了這份借據,把加密後的結果也發給你。你可以用你知道的,屬於我的公鑰來解密,發現加密的內容的確是那張借據。因為其他人沒有私鑰,並不能偽造這份借據的加密版本,就以此證明了我的身份。

一般意義上的數字證書,就是將自己的信息和公鑰,通過CA的私鑰加密,通過專門的證書認證機構CA來保存和認證的數字簽名。
之前那個例子有個問題,就是你要怎麼確保,你所知道的公鑰就是屬於我的呢。如果無法確定公鑰的正確性,就允許了中間人攻擊。因此,需要一個第三方管理單位,來進行數字證書的管理,包括認證,吊銷,保存等。這個第三方單位,用它的私鑰,將我的信息和公鑰加密起來,你用CA的公鑰解密,就能知道屬於我的公鑰是什麼。

HTTP只是個協議,用來規定超文本文件。

HTTPs 基本是在Http協議上加上了SSL協議。SSL協議通過三次握手,來解決中間人攻擊,確保了伺服器端的身份正確。但client端沒有數字證書,伺服器卻無法確定client端的身份,無法確定是你本人在淘寶上使用支付寶操作。

所以為了安全,支付寶為每人發布個人數字證書,並與你的賬號,手機號,郵箱綁定。在一台沒有數字證書的電腦上使用支付寶時,需要通過手機號或者郵箱來確認並安裝。

至於你的個人證書裡面存的是對稱性密碼還是非對稱性的我就不知道了,太久沒用淘寶了。。

如果是非對稱性的話,就是支付寶方在資料庫里存了你的公鑰。你向伺服器展示你的證書,伺服器向你發送通過你的公鑰加密的內容,這裡面的內容參與了後來的對稱性密碼的生成。相當於SSL多了一層客戶端認證的過程。
這裡的個人數字證書,淘寶方本身就擔當了CA身份吧。

SSL詳情參考 https://support.microsoft.com/en-gb/kb/257591


數字簽名又稱代碼簽名證書,它使用特殊的密碼哈希對發布者的身份和軟體進行綁 定,驗證軟體代碼的來源與完整性。
數字證書分為代碼簽名證書與SSL(伺服器)證書兩種。
SSL證書一般部署在伺服器上,用於數據加密,保證數據的完整性、機密性、確定性以及不可抵賴性。
HTTPS是在HTTP協議中加入SSL協議,讓所有傳輸的數據都通過SSL協議,保護數據安全。
目前很多網站還沒有實現HTTPS協議加密傳輸,仍使用不安全的HTTP協議明文傳輸數據。縱觀當下由於諸多原因,有不少網站都先後在伺服器上部署了SSL證書,以達到數據加密、防泄漏的目的。 易維信evtrust.com


推薦閱讀:

charles如何抓取https數據包的?
黑客說HTTPS不再安全,一種新攻擊可成功繞過,是噱頭還是實錘?
HTTP/2.0 相比1.0有哪些重大改進?
HTTPS 可能被這樣劫持嗎?

TAG:網路安全 | SSL | HTTPS | 計算機網路 | 數字證書 |