HTTPS(一) 公鑰 私鑰 數字證書

2021-10-20 14:41:58 字數 3679 閱讀 3527

傳統的http方式在網路傳輸時,傳輸資料都是明文的,很容易出現資料被監聽和竊取的情況:

另外,傳輸的資料還有可能被一些別有用心的人篡改,導致瀏覽器與伺服器之間收發的內容不一致:

也就是說,使用http明文傳輸至少存在著 資料被監聽 以及 資料被篡改 這兩大風險,因此http是一種不安全的協議。

既然http明文傳輸是一種不安全的協議,那麼顯然就需要在網路傳輸過程中對資料進行加密處理。

而加密的方式有兩種:對稱金鑰加密 和 非對稱金鑰加密。

對稱加密是加密與解密使用相同的金鑰;非對稱加密則是加密與解密使用不同的金鑰(公鑰、私鑰)。

對稱加密的優點是加解密效率高,而在網路傳輸中是非常講究效率的,因此很明顯應該優先選擇使用對稱加密:

由於在網路中傳輸的資料都是密文,所以不怕被監聽者獲取到,因為通訊的第三方在沒有金鑰的情況是無法解密的。

然而,這種機制存在的乙個致命問題是:在伺服器與瀏覽器首次通訊進行金鑰協商時,使用的一定是明文,只有在確定使用的金鑰後才能進行加密通訊,這個漏洞在只使用對稱加密的情況是永遠無法解決的,因此需要引入非對稱加密。

非對稱加密的優點是安全性更高,缺點是加解密效率相比於對稱加密的方式會差很多。因此,引入非對稱加密的唯一目的就是保證通訊雙方在進行對稱加密的金鑰交換階段的安全性,在金鑰交換完畢後,通訊雙方就會開始使用對稱加密進行資料交換,而不會再使用非對稱加密。

可以看到,瀏覽器通過使用伺服器發布的非對稱加密的公鑰,將對稱加密的金鑰a進行加密,通過網路傳輸到伺服器,伺服器再使用私鑰解密,從而獲得對稱金鑰a,這段報文即使被監聽者竊取也無法解密,因為只有擁有私鑰的伺服器才能夠解密。

然而,這種機制下同樣存在乙個關鍵問題:瀏覽器如何安全的獲得伺服器的公鑰?

如果瀏覽器使用明文的方式向伺服器請求公鑰,則可能出現伺服器公鑰被其他人篡改的可能。

也就是說,使用者在網路上獲取任何**的公鑰時,都有公鑰被第三方篡改的風險,而一旦使用被篡改的假公鑰來對資料進行加密,就有可能被第三方以假的私鑰進行解密,導致使用者資訊洩露。

為此,為了解決伺服器公鑰傳輸安全性的問題,引入了ca機構,用於專門為各個**簽發數字證書,從而保證瀏覽器可以安全的獲得各個**的公鑰。

前文已經說到,為了解決伺服器公鑰有可能被偽造或篡改的問題,而引入了數字證書。

數字證書由ca機構(certificate authority)簽發,ca機構是pki體系(public key infrastructure,公鑰基礎設施)的核心。

如果使用者想要得到乙份屬於自己的數字證書,首先需要向ca提出申請。在ca判明申請者的身份後,便為它分配乙個公鑰,並且ca將該公鑰與申請者的身份資訊(例如網域名稱)繫結在一起,設定證書有效期,並為之簽名後, 形成證書發給申請者。

ca機構本身同樣擁有一對公鑰和私鑰,它會用自己的私鑰給數字證書簽名後傳送給申請者,而ca機構數量有限,任何正版操作都會將所有主流ca機構的公鑰內建在作業系統當中,因此無需從網路中獲取ca機構的公鑰。

在驗證證書時只需遍歷作業系統中所有內建的ca機構的公鑰,只要有任何乙個公鑰能夠正常解密出資料,就說明證書是合法的。

然後,當瀏覽器向伺服器傳送請求時,伺服器會先將自己的證書返回給瀏覽器,瀏覽器通過所在的作業系統的內建ca公鑰進行解密,如果可以成功解密,並且獲得的伺服器資訊(例如網域名稱)與瀏覽器所請求的伺服器資訊一致,則說明這個證書是可信的,從而在證書中獲得了伺服器的公鑰。

為了不影響主流程的連貫性,前面只是說了關於加密的主要概念,下面對一些實現細節詳細說明:

https為了保證資料傳輸的安全,使用的是對稱加密和非對稱加密結合的方式:

使用非對稱加密進行對稱加密的金鑰協商,之後就使用對稱加密進行資料傳輸。

https在資料傳輸階段並沒有使用非對稱加密,主要原因是:

① 對稱加密由於實現更簡單,所以加解密的效率更高;

② 非對稱加密在某乙個傳輸方向的資料是不安全的:由於伺服器的公鑰是公之於眾的,網路上的所有結點都可以獲得伺服器公鑰,也就可以對伺服器發給客戶端的資訊進行正確解密,例如:

"客戶端" ->

"伺服器": (使用伺服器公鑰加密)

//這條訊息只能通過伺服器的私鑰進行解密,是安全的

"伺服器" ->

"客戶端": (使用私鑰加密)

//這條伺服器返回的訊息,任何人都可以使用伺服器的公鑰進行解密,它是不安全的

① 客戶端通過非對稱加密演算法的掩護,安全的和伺服器商量好乙個對稱加密演算法和金鑰來保證後面通訊過程內容的安全;

② 因為私鑰只有伺服器擁有,因此客戶端可以通過對方是否有私鑰來判斷對方是否就是伺服器。

(1)什麼是訊息摘要:

對乙份資料進行一次hash計算,得到的hash值就是這份資料的 摘要,也稱為 指紋。

(2)什麼是簽名:

在非對稱加密中,如果使用公鑰對資料加密,用私鑰去解密,這是加密; 反之,如果用私鑰對資料加密,用公鑰去解密,這是簽名

兩者的用途完全不同。由於所有人都持有公鑰,所以 「簽名」 並不能保證資料的安全性,因為所有人都可以用公鑰去解密。但 簽名 卻能用於保證訊息的準確性和不可否認性。

因為公鑰和私鑰是一一對應的,所以當乙個公鑰能解密某個密文時,說明這個密文一定來自於私鑰持有者,從而證明了訊息傳送者身份的真實性。

但又因為非對稱加密效率太低,所以 私鑰只加密原文的摘要,這樣運算量就小的多,而且得到的數字簽名也很小,方便保管和傳輸。

簽名和公鑰一樣完全公開,任何人都可以獲取。但這個簽名只有用私鑰對應的公鑰才能解開,拿到摘要後,再比對原文驗證完整性,就可以像簽署檔案一樣證明訊息確實是你發的。

這兩個行為有專業術語,叫 「簽名」 和 「驗籤」。

(3)數字簽名的作用:

① 證明資料傳送者身份真實可靠;

② 驗證接收到的資料未被篡改過。

(來自真正的伺服器,且資料完整原始)

(4)摘要演算法:(又稱 雜湊演算法、雜湊演算法)

常見的摘要演算法有 md5、sha-1、sha-256。

作為摘要演算法,必須有以下特點:

(1)對於任意長度的輸入,通過摘要演算法的計算後,得出的值必須為 固定長度;(例如md5,無論輸入資料多大,輸出總是128位的雜湊值)

(2)摘要演算法是 不可逆 的(單向的),只能根據原始資料計算出摘要值,不能根據摘要值反推出原始資料。

可以看到證書的三層關係:

root:可以理解為 最高端別的簽發人 issuer,負責認證 intermediates身份的合法性。

這其實代表了乙個信任鏈條,最終的目的就是為了保證 end-user 證書是可信的,該證書的公鑰也是可信的。

《寫一篇最好懂的https講解》

《公鑰,私鑰和數字證書關係》

《數字證書原理,公鑰私鑰加密原理》

《數字簽名演算法md5和sha-1的比較》

《摘要、簽名與數字證書都是什麼?》

《關於證書鏈的一點認知》

《http權威指南》

《nginx核心知識100講》

https 公鑰,私鑰,數字證書

https是http與ssl的結合,為了解決http明文傳輸導致資訊洩露的問題。ssl通過公鑰和私鑰保證客戶端和伺服器之間的通訊加密,由權威機構辦法的數字證書杜絕了中間人攻擊的可能。http是處於應用層的傳輸協議,ssl是處於與tcp同層的傳輸層和應用層之間的協議,由於http使用明文傳輸,就會導致...

公鑰,私鑰,數字證書

公鑰,私鑰,數字證書 本文簡單介紹公鑰,私鑰及數字證書原理及在實際生產中如何使用.一 公鑰,私鑰原理 公鑰和私鑰就是俗稱的不對稱加密方式,是從以前的對稱加密 使用使用者名稱與密碼 方式的提高。公 鑰成對出現,私鑰加的密用公鑰解,公解加的密用私鑰解密。公鑰一般用於加密,驗證簽名 私鑰一般用於簽名 簽名...

公鑰,私鑰 和數字證書

公鑰,私鑰 和數字證書 公鑰和私鑰就是俗稱的不對稱加密方式,是從以前的對稱加密 使用使用者名稱與密碼 方式的提高。用電子郵件的方式說明一下原理。使用公鑰與私鑰的目的就是實現安全的電子郵件,必須實現如下目的 1.我傳送給你的內容必須加密,在郵件的傳輸過程中不能被別人看到。2.必須保證是我傳送的郵件,不...