弄懂加密 簽名 證書以及HTTPS

2021-09-16 22:09:32 字數 1935 閱讀 4310

這裡是一篇精煉而全面的介紹文章,把圍繞證書的那些概念都串起來了。本文將對一些細節做一些補充。

首先,我們需要乙個清晰的定義來理解加密、金鑰、演算法這些概念:

可以把加密演算法看作乙個複雜的函式變換,y = f(m, key),y代表密文,即加密後得到的字串行,m代表明文,即待加密的字串行,key代表金鑰,f代表加密演算法。

言簡意賅。所以,對稱加密(演算法)就是指加密金鑰和解密金鑰相同;非對稱加密是指加密金鑰和解密金鑰是一對不同的值(公鑰(public key)和私鑰(private key))。私鑰只能由持有者安全保管,不能外洩,而公鑰則可以發給任何請求它的人。

另外,觀察這個式子,f(加密演算法)往往是公開的,因而要想使密文不被別人破解,必須確保金鑰不被洩露。

對稱加密演算法常見的有des和aes,速度很快;非對稱加密常見的就是rsa,速度較慢。非對稱加密的特性是,用私鑰加密的資料只有用公鑰才能解開,用公鑰加密的資料只有用私鑰才能解開。

雜湊演算法和加密沒有關係。它就是資料結構中的雜湊演算法(只不過運算更加複雜一些)。雜湊演算法把很長的資料變成固定長度的文字,因而也稱為資料的摘要(digest)或指紋(fingerprint)。因為是摘要(資訊從多到少),因而是不可逆的,即不能從摘要倒推出資料。同樣,雜湊演算法也會出現碰撞,即不同的文字產生了相同的摘要,只不過這種碰撞很難找到。

常見的雜湊演算法有md5和sha1,後來被攻破(能迅速找到碰撞文字)。現在新的標準是sha2和sha3。

雜湊演算法的主要用途就是校驗資料是否被更改。比如傳送一封郵件,同時附上正文內容的摘要,接受者可以計算正文的摘要,再與這個摘要比對,從而判斷郵件內容是否被篡改。但是僅有這個還是不夠,因為網路黑客既然能夠篡改正文,就能夠篡改摘要。因而,再結合非對稱加密技術,把摘要用傳送者的私鑰加密了,接受者用傳送者的公鑰解密摘要,就能確保摘要是真實的(因為只有傳送者有私鑰,能夠讓接收者解密出正確的摘要),從而可以驗證正文。這個加了密的摘要就稱為數字簽名(digital signature)。

其實我們可以發現,不用雜湊演算法也是可以實現安全通訊的。傳送方可以直接用接收方的公鑰加密內容,只有接受方能夠解密內容。但是非對稱加密很慢,實際應用還是使用對稱加密來加密較大內容。(可以參考這篇文章)

關於安全通訊的深入思考,可以看看這篇部落格

阮一峰的部落格描述的非常好。

基本過程:

客戶端向伺服器端索要並驗證公鑰。

雙方協商生成"對話金鑰"。

雙方採用"對話金鑰"進行加密通訊。

數字證書是乙個經證書授權中心(ca)數字簽名的包含公鑰擁有者資訊以及公鑰的檔案。數字證書的作用是證明證書中列出的使用者合法擁有證書中列出的公鑰。

最簡單的證書包含乙個公鑰、名稱以及證書授權中心的數字簽名。

接收者(如瀏覽器等客戶端)如何驗證證書是否是合法的呢?

證書發行者要用自己的私鑰把證書內容的摘要加密,作為數字簽名放在證書中。客戶端讀取證書的數字簽名部分,用自身根證書列表中對應的公鑰證書對其進行解密。如果解密成功,並且證書雜湊值與簽名內的雜湊值匹配一致,可證明站點提供的證書確實是該ca根證書簽發的。

作業系統以及瀏覽器都帶有自己的根證書集合,常見的有verisign等。

而所謂「自簽名證書」就是自己生成乙個證書,然後用自己的私鑰加密摘要產生數字簽名。除非把這個證書加入系統信任證書集合中,否則客戶端是不會信任這個證書的。

證書裡面有什麼?

常用的證書標準有x.509和pkcs #12。通常證書裡應該含有簽發機構名、證書使用者名稱、數字簽名、用途、有效期、演算法、公鑰等資訊。

常見的證書檔案字尾:

ssl證書繫結

就是把證書和私鑰繫結到web站點上,用於ssl。

簽名證書VS加密證書

從證書的用途來看,數字證書可以分為 簽名證書 主要用於對使用者資訊進行簽名,以保證資訊的不可否認性。加密證書 主要用於對使用者傳送資訊進行加密,以保證資訊的真實性和完整性。什麼是加密證書和簽名證書?數字證書可分為簽名證書和加密證書。簽名證書主要用於對使用者資訊進行簽名,以保證資訊的有效性和不可否認性...

加密和簽名證書

1.5 簽名和加密 我們說加密 是指對某個內容加密,加密後的內容還可以通過 解密進行還原。比如我們把一封郵件進行加密,加密後的內容在網路上進行傳輸,接收者在收到後,通過 解密可以還原郵件的真實內容。這裡主要解釋一下簽名,簽名就是在資訊的後面再加上一段內容,可以證明 資訊 沒有被修改過,怎麼樣可以達到...

證書簽名驗籤以及加密解密

簽名,驗籤的理解 一 公鑰加密 假設一下,我找了兩個數字,乙個是1,乙個是2。我喜歡2這個數字,就保留起來,不告訴你們 私鑰 然後我告訴大家,1是我的公鑰。我有乙個檔案,不能讓別人看,我就用1加密了。別人找到了這個檔案,但是他不知道2就是解密的私鑰啊,所以他解不開,只有我可以用 數字2,就是我的私鑰...