但是當一開始服務端傳送的公鑰到客戶端的過程中有可能被第三方劫持,然後第三方自己偽造一對金鑰,將公鑰傳送給客戶端,當伺服器傳送資料給客戶端的時候,中間人將資訊進行劫持,用一開始劫持的公鑰進行解密後,然後使用自己的私鑰將資料加密傳送給客戶端,而客戶端收到後使用公鑰解密,反過來亦是如此,整個過程中間人是透明的,但資訊洩露卻不得而知。
為了防止中間人攻擊,整個傳輸過程中亟需解決的是保證客戶端收到的公鑰是服務端傳送的,為此提出了數字證書,數字證書是由權威的ca機構給服務端進行頒發,ca機構通過服務端提供的相關資訊生成證書,證書內容包含了持有人的相關資訊,公鑰,簽署者簽名資訊等,最重要的是公鑰在數字證書中。數字證書是如何保證公鑰來自請求的伺服器呢?數字證書上由持有人的相關資訊,通過這點可以確定其不是乙個中間人;但是證書也是可以偽造的,如何保證證書為真呢?
乙個證書中含有三個部分:"證書內容(f1), 加密演算法(a),加密密文(f3') ",三者的關係如下圖,證書內容f1f會被雜湊演算法sha1計算出hash值f2,然後使用ca機構提供的私鑰進行rsa加密
當客戶端發起請求的時候,伺服器將該數字證書傳送給客戶端,客戶端將其中的加密密文(f3)通過ca機構提供的公鑰及逆行解密後得到f2,同時將證書內容(f1)使用sha1雜湊成f2,如果兩者相等則說明證書沒問題。
由於劫持者不知道當初加密使用的私鑰是什麼,所以永遠無法偽造出乙個正確的證書可以通過上述的驗證,但仔細思考後發現,這個辦法的核心是保證上圖中提供rsa解密的公鑰是絕對正確的,否則的話,劫持者可以改變到這個公鑰的話,那偽造的證書也可以通過驗證了,但我還不知道是如何保證這個公鑰絕對沒問題。部分的猜想是,由於這個公鑰是相對固定的,部分作業系統在安裝的時候這些公鑰就被寫進作業系統中,通過許可權控制導致這個公鑰很難被修改。
當客戶端接收了從服務端傳送而來的數字證書,進行計算驗證後發現證書沒有問題,說明這個公鑰是伺服器傳送的,從證書中獲取服務端的公鑰,就可以和伺服器進行加密通訊了。但是非對稱加解密太耗費時間,因此客戶端會傳送乙個對稱金鑰給服務端,由於這個金鑰使用了公鑰進行加密,只有服務端才能解開得到,往後服務端和客戶端可以通過這個對稱金鑰進行高效的安全通訊。 很多時候從ca機構獲取的數字證書是要錢的,但簡單的開發測試的時候可以自己建立數字證書,比如,此類證書使用的時候瀏覽器會報告不安全,是因為沒有公鑰無法驗證,可以選擇信任證書,或者是安裝證書,其實是乙個意思。HTTPS(一) 公鑰 私鑰 數字證書
傳統的http方式在網路傳輸時,傳輸資料都是明文的,很容易出現資料被監聽和竊取的情況 另外,傳輸的資料還有可能被一些別有用心的人篡改,導致瀏覽器與伺服器之間收發的內容不一致 也就是說,使用http明文傳輸至少存在著 資料被監聽 以及 資料被篡改 這兩大風險,因此http是一種不安全的協議。既然htt...
公鑰,私鑰,數字證書
公鑰,私鑰,數字證書 本文簡單介紹公鑰,私鑰及數字證書原理及在實際生產中如何使用.一 公鑰,私鑰原理 公鑰和私鑰就是俗稱的不對稱加密方式,是從以前的對稱加密 使用使用者名稱與密碼 方式的提高。公 鑰成對出現,私鑰加的密用公鑰解,公解加的密用私鑰解密。公鑰一般用於加密,驗證簽名 私鑰一般用於簽名 簽名...
公鑰,私鑰 和數字證書
公鑰,私鑰 和數字證書 公鑰和私鑰就是俗稱的不對稱加密方式,是從以前的對稱加密 使用使用者名稱與密碼 方式的提高。用電子郵件的方式說明一下原理。使用公鑰與私鑰的目的就是實現安全的電子郵件,必須實現如下目的 1.我傳送給你的內容必須加密,在郵件的傳輸過程中不能被別人看到。2.必須保證是我傳送的郵件,不...