『壹』 https交互過程
在這里整理一下最近這兩天整理的https的相關知識。
大家都知道要使用https,需要在網站的伺服器上配置https證書(一般是nginx,或者tomcat),證書可以使用自己生成,也可以向專門的https證書提供商進行購買。這兩種的區別是自己生成的證書是不被瀏覽器信任的,所以當訪問的時候回提示不安全的網站,需要點擊信任之後才能繼續訪問
自己生成的
而購買的https證書會提示安全
DV,OV
EV
這是因為瀏覽器中預置了一些https證書提供商的證書,在瀏覽器獲取到伺服器的https證書進行驗證的時候就知道這個https證書是可信的;而自己生成的證書,瀏覽器獲取到之後無法進行驗證是否可信,所以就給出不安全的提示。
下面對具體的一些知識點進行介紹
1. 什麼是https
https簡單的說就是安全版的http,因為http協議的數據都是明文進行傳輸的,所以對於一些敏感信息的傳輸就很不安全,為了安全傳輸敏感數據,網景公司設計了SSL(Secure Socket Layer),在http的基礎上添加了一個安全傳輸層,對所有的數據都加密後再進行傳輸,客戶端和伺服器端收到加密數據後按照之前約定好的秘鑰解密。
2. 加密和解密
Https的發展和密碼學的發展是分不開的。大家應該知道加密方式可以大體分為對稱加密和非對稱加密(反正我就知道這兩種)
對稱加密,就是加密和解密都是用同一個秘鑰,這種方式優點就是速度快,缺點就是在管理和分配秘鑰的時候不安全。
非對稱加密演算法,非對稱加密有一個秘鑰對,叫做公鑰和私鑰,私鑰自己持有,公鑰可以公開的發送給使用的人。使用公鑰進行加密的信息,只有和其配對的私鑰可以解開。目前常見的非對稱加密演算法是RSA,非對稱的加密演算法的優點是安全,因為他不需要把私鑰暴露出去。
在正式的使用場景中一般都是對稱加密和非對稱加密結合使用,使用非對稱加密完成秘鑰的傳遞,然後使用對稱秘鑰進行數據加密和解密
3. https證書的申請流程
1 在伺服器上生成CSR文件(證書申請文件,內容包括證書公鑰、使用的Hash演算法、申請的域名、公司名稱、職位等信息)
可以使用命令在伺服器上生成;也可以使用線上的工具進行生成,線上的工具會把公鑰加入到CSR文件中,並同時生成私鑰。
CSR文件內容
2 把CSR文件和其他可能的證件上傳到CA認證機構,CA機構收到證書申請之後,使用申請中的Hash演算法,對部分內容進行摘要,然後使用CA機構自己的私鑰對這段摘要信息進行簽名,
CA機構進行簽名
3 然後CA機構把簽名過的證書通過郵件形式發送到申請者手中。
4 申請者收到證書之後部署到自己的web伺服器中。下面會在寫一篇關於部署的文章
當然這是不通過CA代理機構進行申請的流程,現在網上有好多CA的代理機構,像騰訊雲,阿里雲都可以申請https證書,流程都差不多。
阿里雲申請證書流程
4. 客戶端(瀏覽器)和伺服器端交互流程
客戶端服務端交互
client Hello,客戶端(通常是瀏覽器)先向伺服器發出加密通信的請求
(1) 支持的協議版本,比如TLS 1.0版。
(2) 一個客戶端生成的隨機數 random1,稍後用於生成"對話密鑰"。
(3) 支持的加密方法,比如RSA公鑰加密。
(4) 支持的壓縮方法。
伺服器收到請求,然後響應 (server Hello)
(1) 確認使用的加密通信協議版本,比如TLS 1.0版本。如果瀏覽器與伺服器支持的版本不一致,伺服器關閉加密通信。
(2) 一個伺服器生成的隨機數random2,稍後用於生成"對話密鑰"。
(3) 確認使用的加密方法,比如RSA公鑰加密。
(4) 伺服器證書。
證書內容
證書內容
客戶端收到證書之後會首先會進行驗證
驗證流程
我們知道CA機構在簽發證書的時候,都會使用自己的私鑰對證書進行簽名
證書里的簽名演算法欄位 sha256RSA 表示,CA機構使用sha256對證書進行摘要,然後使用RSA演算法對摘要進行私鑰簽名,而我們也知道RSA演算法中,使用私鑰簽名之後,只有公鑰才能進行驗簽。
如果我們使用的是購買的證書,那麼很有可能,頒發這個證書的CA機構的公鑰已經預置在操作系統中。這樣瀏覽器就可以使用CA機構的公鑰對伺服器的證書進行驗簽。確定這個證書是不是由正規的CA機構頒發的。驗簽之後得到CA機構使用sha256得到的證書摘要,然後客戶端再使用sha256對證書內容進行一次摘要,如果得到的值和驗簽之後得到的摘要值相同,則表示證書沒有被修改過。
如果驗證通過,就會顯示上面的安全字樣,如果伺服器購買的證書是更高級的EV類型,就會顯示出購買證書的時候提供的企業名稱。如果沒有驗證通過,就會顯示不安全的提示。
生成隨機數
驗證通過之後,客戶端會生成一個隨機數pre-master secret,然後使用證書中的公鑰進行加密,然後傳遞給伺服器端
PreMaster secret
PreMaster Secret是在客戶端使用RSA或者Diffie-Hellman等加密演算法生成的。它將用來跟服務端和客戶端在Hello階段產生的隨機數結合在一起生成 Master Secret。在客戶端使用服務端的公鑰對PreMaster Secret進行加密之後傳送給服務端,服務端將使用私鑰進行解密得到PreMaster secret。也就是說服務端和客戶端都有一份相同的PreMaster secret和隨機數。
PreMaster secret前兩個位元組是TLS的版本號,這是一個比較重要的用來核對握手數據的版本號,因為在Client Hello階段,客戶端會發送一份加密套件列表和當前支持的SSL/TLS的版本號給服務端,而且是使用明文傳送的,如果握手的數據包被破解之後,攻擊者很有可能串改數據包,選擇一個安全性較低的加密套件和版本給服務端,從而對數據進行破解。所以,服務端需要對密文中解密出來對的PreMaster版本號跟之前Client Hello階段的版本號進行對比,如果版本號變低,則說明被串改,則立即停止發送任何消息。
pre-master secret
伺服器收到使用公鑰加密的內容,在伺服器端使用私鑰解密之後獲得隨機數pre-master secret,然後根據radom1、radom2、pre-master secret通過一定的演算法得出session Key和MAC演算法秘鑰,作為後面交互過程中使用對稱秘鑰。同時客戶端也會使用radom1、radom2、pre-master secret,和同樣的演算法生成session Key和MAC演算法的秘鑰。
生成session Key的過程中會用到PRF(Pseudorandom Function偽隨機方法)來生成一個key_block,然後再使用key_block,生成後面使用的秘鑰。
key_block = PRF(SecurityParameters.master_secret,"key expansion",SecurityParameters.server_random +SecurityParameters.client_random);
PRF是在規范中約定的偽隨機函數
在信息交互過程中用到的秘鑰有6個分別是。客戶端和伺服器端分別使用相同的演算法生成。
秘鑰名稱秘鑰作用
client_write_MAC_key[SecurityParameters.mac_key_length]客戶端發送數據使用的摘要MAC演算法
server_write_MAC_key[SecurityParameters.mac_key_length]服務端發送數據使用摘要MAC演算法
client_write_key[SecurityParameters.enc_key_length]客戶端數據加密,服務端解密
server_write_key[SecurityParameters.enc_key_length]服務端加密,客戶端解密
client_write_IV[SecurityParameters.fixed_iv_length]初始化向量,運用於分組對稱加密
server_write_IV[SecurityParameters.fixed_iv_length]初始化向量,運用於分組對稱加密
然後再後續的交互中就使用session Key和MAC演算法的秘鑰對傳輸的內容進行加密和解密。
具體的步驟是先使用MAC秘鑰對內容進行摘要,然後把摘要放在內容的後面使用sessionKey再進行加密。對於客戶端發送的數據,伺服器端收到之後,需要先使用client_write_key進行解密,然後使用client_write_MAC_key對數據完整性進行驗證。伺服器端發送的數據,客戶端會使用server_write_key和server_write_MAC_key進行相同的操作。
鏈接:https://www.jianshu.com/p/b0b6b88fe9fe
『貳』 目前常用的加密方法有
目前常用的加密方法有什麼帶旅如下:
1、不可逆加密演算法有MD5,HMAC,SHA1、SHA-224、SHA-256、SHA-384,和SHA-512,其中SHA-224、SHA-256、SHA-384,和SHA-512我們可以統稱為SHA2加密演算法,SHA加密算拿行滾法的安全性要比MD5更高,而SHA2加密演算法比SHA1的要高。
2、其中SHA後面的數字表示的是加密後的字元消余串長度,SHA1默認會產生一個160位的信息摘要。
『叄』 目前常用的加密方式主要有哪兩種
1. 目前常用的加密方式主要有對稱加密和非對稱加密兩種。
2. 對稱加密指的是加密和解密使用相同的密鑰,常見的對稱加密演算法如DES、AES等。
它的優點是加密解密速度快,缺點是密鑰的傳輸難度大,容首緩易被破解。
非對稱加密指的是加密和解密使用不同的密鑰,常見的非對稱加密演算法如RSA、ECC等者盯模。
它的優點是安全性高,缺點則臘是加密解密速度慢。
3. 除了對稱加密和非對稱加密,還有一種哈希演算法,它是將明文轉換為固定長度的密文,不可逆的加密方式。
常見的哈希演算法如MD5、SHA等。
哈希演算法主要用於校驗數據的完整性,一般不用於加密解密。
『肆』 目前常用的加密方法主要有哪兩種
私有密鑰加密和公開密鑰加密。加密是以某種特殊的演算法改變原有的信息數據,使得未授權的用戶即使獲得了已加密的信息,到2022年常用的加密方法主要有私有密鑰加密和公開密鑰加密兩種,按照網路層次的不同,數據加密方式劃分,主要有鏈路加密、節點加密、端到端的加密三種。
『伍』 密碼體制中,加密演算法一般分為哪幾種
古典加密演算法分為替代演算法和置換移位法。
1、替代演算法
替代演算法用明文的字母由其他字母或數字或符號所代替。最著名的替代演算法是愷撒密碼。凱撒密碼的原理很簡單,其實就是單字母替換。
例子:
明文:abcdefghijklmnopq
密文:defghijklmnopqrst
2、置換移位法
使用置換移位法的最著名的一種密碼稱為維吉尼亞密碼。它以置換移位為基礎的周期替換密碼。
在維吉尼亞密碼中,加密密鑰是一個可被任意指定的字元串。加密密鑰字元依次逐個作用於明文信息字元。明文信息長度往往會大於密鑰字元串長度,而明文的每一個字元都需要有一個對應的密鑰字元,因此密鑰就需要不斷循環,直至明文每一個字元都對應一個密鑰字元。
其他常見的加密演算法
1、DES演算法是密碼體制中的對稱密碼體制,把64位的明文輸入塊變為64位的密文輸出塊,它所使用的密鑰也是64位。
2、3DES是基於DES的對稱演算法,對一塊數據用三個不同的密鑰進行三次加密,強度更高。
3、RC2和RC4是對稱演算法,用變長密鑰對大量數據進行加密,比DES快。
4、IDEA演算法是在DES演算法的基礎上發展出來的,是作為迭代的分組密碼實現的,使用128位的密鑰和8個循環。
5、RSA是由RSA公司發明,是一個支持變長密鑰的公共密鑰演算法,需要加密的文件塊的長度也是可變的,非對稱演算法。
6、DSA,即數字簽名演算法,是一種標準的 DSS(數字簽名標准),嚴格來說不算加密演算法。
7、AES是高級加密標准對稱演算法,是下一代的加密演算法標准,速度快,安全級別高,在21世紀AES 標準的一個實現是 Rijndael演算法。