在閱讀RabbitMQ資料傳輸安全的章節時,提到了ssl協議,用了很大篇幅介紹使用openssl生成一些列祕鑰和證書,如果沒有相關基礎,會不太好理解,本篇就來總結下資料安全相關的概念以及瀏覽器HTTPS的應用。
通過介紹,你會了解到:
- 資料安全的基本概念
- 加密演算法
- 數字證書和證書機構
- ssl和openssl基本介紹
- https應用
資料安全的基本概念
資料要在網路中傳輸,就會存在安全問題,因為任何人都可以獲得你傳送的資料包,從而獲得你的資料,需要對資料進行加密,對於資料傳送者,也可能被偽造,需要對雙方身份做驗證,另外,資料的完整性也需要考慮。
總結下安全的定義:
- 保密性:只有自己和允許的人能看到或看懂資料;
- 完整性:資料沒有被破壞或篡改;
- 可信任性:確保訊息是對方發的,不是偽造者發的;
加密演算法
加密是保證資料安全的常用手段,已經有很多現成的加密演算法了,這些演算法都是經過驗證和考驗的,想要破解非常困難,所以,一般不需要設計演算法,可以直接使用,這裡只會介紹常見演算法的基本概念和特性,不涉及演算法實現細節。
雜湊
雜湊就是hash演算法,把任意長度的輸入,通過雜湊演算法,變換成固定長度的輸出,該輸出就是雜湊值,常見的hash演算法有MD5和SHA。
MD5即Message-Digest Algorithm 5,稱為資訊-摘要演算法5,主要用於確保資訊傳輸的完整性,輸入是不定長度資訊,輸出固定長度128位元的串。
SHA即Secure Hash Algorithm,稱為安全雜湊演算法,和MD5一樣,也是從MD4發展而來,與MD5的最大區別在於其摘要比MD5長32位元。
還有很重要的一點是,任意兩個文件得到相同字串的概率幾乎等於0。
對稱加密
加密就是把原始資料通過某種變換變成看不懂的東西,對於對稱加密,這個操作是可逆的,另外,加密演算法不能單獨工作,必須有金鑰配合,加密和解密的金鑰是同一個,目前流行的對稱加密演算法有DES,AES。
DES即Data Encryption Standard,稱為資料加密標準,是美國政府採納IBM公司設計的方案作為非機密資料的正式資料加密標準,DES演算法的入口引數有三個:Key、Data、Mode:
- Key為8個位元組,是DES演算法的工作金鑰;
- Data也為8個位元組,是要被加密或被解密的資料;
- Mode為DES的工作方式:加密或解密;
如Mode為加密,用Key把Data進行加密,生成Data的密碼形式(64位)作為DES的輸出結果,如Mode為解密,用Key把密碼形式的Data解密,還原為Data的明碼形式(64位)作為DES的輸出結果。
AES即Advanced Encryption Standard,稱為高階加密標準,是下一代的加密演算法標準,速度快,安全級別高,它可以使用128、192和256位金鑰。
對稱加密演算法的優點是速度快,缺點是金鑰管理不方便,要求共享金鑰。
非對稱加密
相對於對稱加密,非對稱加密和解密不是同一個金鑰,一個稱為公鑰,另一個稱為私鑰。公鑰就是公開的,大家都知道,而私鑰只有你自己知道。
用公鑰加密的內容只能由相應的私鑰來解密,反過來,用私鑰加密的內容只能由相應的公鑰來解密,常用的非對稱加密演算法有RSA、ECC。
RSA演算法是第一個能同時用於加密和數字簽名的演算法,也易於理解和操作,應用比較廣泛。
非對稱加密演算法的優點是金鑰管理很方便,缺點是速度慢。
數字簽名
數字簽名主要保證可信任性,不可偽造,所用的技術是前面介紹的雜湊和非對稱加密。
首先為要簽名的資料生成一個Hash字串hash1,然後用你的私鑰加密得到encrypted(hash1),這就是資料的數字簽名。當別人需要驗證資料是否是你傳送的時候,只需要用你的公鑰解密你的簽名得到hash1,並和資料計算出來的hash2對比,檢視是否一致。
對於非對稱加密和數字簽名,如果之前沒接觸過,可能不太好理解,可以閱讀相關文章進一步瞭解,在後面介紹https應用時,會說明其應用過程。
數字證書和證書機構
為了方便傳遞公鑰祕鑰,一般把它儲存在數字證書中,為了保證證書的可信性,一般由專業證書機構頒發。
考慮這樣一個場景,使用者A想訪問小米網mi.com,但由於手誤,寫成了ni.com,假設ni.com是不法分子仿照小米網建立的網站,包含一個偽造的數字證書,如果瀏覽器可以驗證數字證書的真實性,就會提示使用者證書異常,防止使用者的損失。
CA就是證書的簽發機構,負責簽發證書、認證證書、管理已頒發證書的機關,制定了具體步驟來驗證、識別使用者身份,並對使用者證書進行簽名,以確保證書持有者的身份和公鑰的擁有權。
要申請證書,應先向CA提出申請,在CA確認申請者的身份後,會分配一個公鑰,然後將該公鑰與申請者的身份資訊綁在一起,使用CA的私鑰進行簽名,便形成證書發給申請者。
如果想鑑別證書的真偽,用CA的公鑰對證書上的簽字進行驗證,一旦驗證通過,並且在有效期之內,該證書就被認為是有效的。
所以,配置ssl時,需要CA根證書的公鑰,用於驗證證書的真偽。
ssl和openssl基本介紹
ssl是保證資料安全傳輸的一個協議,openssl是一個工具,包含各種協議和演算法的實現。
ssl
保證資料傳輸安全,比較簡單的方法是用非對稱加密,如果雙方都認證了對方的數字證書麼每次傳輸資料的時候都用對方的公鑰加密,那麼只有對方能解密,從而保證了資訊的安全。但是對於日常應用(比如網頁瀏覽)有兩個問題:
- 非對稱加密速度很慢,而且消耗資源;
- 不可能要求每個使用者都去申請數字證書,因為過程比較麻煩;
SSL(Secure Sockets Layer)通過握手協議和傳輸協議來解決上面的問題,它是一種間於傳輸層(比如TCP/IP)和應用層(比如HTTP)的協議,對資料進行加密和簽名處理。
它由網景公司設計的,到了1999年,SSL因為應用廣泛,已經成為網際網路上的事實標準,IETF就在那年把SSL標準化,標準化之後的名稱改為TLS(Transport Layer Security),中文叫做“傳輸層安全協議”,所以兩者可以視作同一個東西的不同階段。
SSL的基本思想是用非對稱加密來建立連結(握手階段),用對稱加密來傳輸資料(傳輸階段)。這樣既保證了金鑰分發的安全,也保證了通訊的效率。
具體過程,介紹https應用時,會詳細介紹。
openssl
openssl是一套開源工具集,主要包含3個元件:
- openssl:多用途的命令列工具
- libcrypto:加密演算法庫,實現了常用的加密演算法;
- libssl:加密模組應用庫,實現了ssl及tls協議;
下面舉幾個例項來說明它的使用。
1.使用MD5加密
2.生成隨機數
3.對稱加密
4.生成祕鑰對
https應用
HTTPS 協議,說白了就是HTTP協議和SSL/TLS協議的組合,可以把HTTPS大致理解為:HTTP over SSL。
Https在建立Socket連線之前,需要進行握手,單向認證和雙向認證不同。
具體過程網上很多,我就摘錄一個 博友 的一個圖,說明下雙向認證的過程:
下一篇就來說說RabbitMQ的效能和安全考慮。
歡迎掃描下方二維碼,關注我的個人微信公眾號,檢視更多文章 ~