在如今網際網路高速發展,技術人員技術日益精深的情況下,網路安全越來越受到大家的重視,而https作為網路安全中比較基礎的部分, 絕大部分的客戶端都在使用,那麼你真的清楚https的加密原理嗎?下面就讓我用簡單易懂的方式了解下。
首先我們先思考下面幾個問題:
1、客戶端如何進行簽名的?
2、簽名的驗證是在哪,服務端?客戶端?
3、如何驗證簽名?
首先我們說下使用https的作用,主要有三個:
驗證伺服器或客戶端的身份合法
報文加密
驗證資料完整性
採用https可以有效抵禦中間人攻擊、報文監聽攻擊和報文篡改攻擊。不過,針對報文監聽這種攻擊的抵禦不是絕對的,https是基於tls的http,可以將http請求的url path、request header、request body等內容加密,由於**需要提供ip及埠資訊,所以監聽者還是能夠監聽到目的ip(甚至網域名稱)、目的埠、源ip、源埠、報文大小、通訊時間等資訊的。
https為了兼顧安全與效率,同時使用了對稱加密和非對稱加密。資料是被對稱加密傳輸的,對稱加密過程需要客戶端的乙個金鑰,為了確保能把該金鑰安全傳輸到伺服器端,採用非對稱加密對該金鑰進行加密傳輸,總的來說,對資料進行對稱加密,對稱加密所要使用的金鑰通過非對稱加密傳輸。
https在傳輸的過程中會涉及到三個金鑰:
1、伺服器端的公鑰和私鑰,用來進行非對稱加密
2、客戶端生成的隨機金鑰,用來進行對稱加密
乙個https請求實際上包含了兩次http傳輸,可以細分為7步。
1、客戶端向伺服器發起https請求,攜帶客戶端ssl/tls資訊,伺服器端有乙個金鑰對,即公鑰和私鑰,是用來進行非對稱加密使用的,伺服器端儲存著私鑰,將公鑰下發到客戶端。
2、客戶端收到伺服器端的公鑰之後,會對公鑰進行檢查,驗證其合法性,如果發現發現公鑰有問題,那麼https傳輸就無法繼續。公鑰的驗證:在裝置中儲存了全球公認的知名ca的公鑰。當客戶端接收到伺服器的數字證書的時候,會通過系統中內建的ca公鑰進行解密,如果解密成功說明公鑰是有效的,否則就是不受信任的證書。
3、如果公鑰合格,那麼客戶端會生成乙個隨機值,這個隨機值就是用於進行對稱加密的金鑰,我們將該金鑰稱之為client key,即客戶端金鑰,這樣在概念上和伺服器端的金鑰容易進行區分。然後用伺服器的公鑰對客戶端金鑰進行非對稱加密,這樣客戶端金鑰就變成密文了,至此,https中的第一次http請求結束。
4、客戶端會發起https中的第二個http請求,將加密之後的客戶端金鑰傳送給伺服器。
5、伺服器接收到客戶端發來的密文之後,會用自己的私鑰對其進行非對稱解密,解密之後的明文就是客戶端金鑰,然後用客戶端金鑰對資料進行對稱加密,這樣資料就變成了密文。
6、然後伺服器將加密後的密文傳送給客戶端。
7、客戶端收到伺服器傳送來的密文,用客戶端金鑰對其進行對稱解密,得到伺服器傳送的資料。這樣https中的第二個http請求結束,整個https傳輸完成。
自簽名證書支援https
openssl req new newkey rsa 2048 nodes subj key ssl.key out ssl.csr主題可以空著,但是不能不寫這個引數,不然會讓你一行一行輸入 openssl req new newkey rsa 2048 nodes subj c cn st gua...
生成HTTPS簽名證書,IOS可用
keytool genkey alias tomcat keypass 123456 keyalg rsa keysize 1024 validity 36500 keystore tomcat.keystore storepass 123456 keytool genkey alias clien...
弄懂加密 簽名 證書以及HTTPS
這裡是一篇精煉而全面的介紹文章,把圍繞證書的那些概念都串起來了。本文將對一些細節做一些補充。首先,我們需要乙個清晰的定義來理解加密 金鑰 演算法這些概念 可以把加密演算法看作乙個複雜的函式變換,y f m,key y代表密文,即加密後得到的字串行,m代表明文,即待加密的字串行,key代表金鑰,f代表...