在閱讀RabbitMQ數據傳輸安全的章節時,提到了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。.net
DES即Data Encryption Standard,稱爲數據加密標準,是美國政府採納IBM公司設計的方案做爲非機密數據的正式數據加密標準,DES算法的入口參數有三個:Key、Data、Mode:
如Mode爲加密,用Key把Data進行加密,生成Data的密碼形式(64位)做爲DES的輸出結果,如Mode爲解密,用Key把密碼形式的Data解密,還原爲Data的明碼形式(64位)做爲DES的輸出結果。
AES即Advanced Encryption Standard,稱爲高級加密標準,是下一代的加密算法標準,速度快,安全級別高,它可使用12八、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(Secure Sockets Layer)經過握手協議和傳輸協議來解決上面的問題,它是一種間於傳輸層(好比TCP/IP)和應用層(好比HTTP)的協議,對數據進行加密和簽名處理。
它由網景公司設計的,到了1999年,SSL由於應用普遍,已經成爲互聯網上的事實標準,IETF就在那年把SSL標準化,標準化以後的名稱改成TLS(Transport Layer Security),中文叫作「傳輸層安全協議」,因此二者能夠視做同一個東西的不一樣階段。
SSL的基本思想是用非對稱加密來創建連接(握手階段),用對稱加密來傳輸數據(傳輸階段)。這樣既保證了密鑰分發的安全,也保證了通訊的效率。
具體過程,介紹https應用時,會詳細介紹。
openssl是一套開源工具集,主要包含3個組件:
下面舉幾個實例來講明它的使用。
1.使用MD5加密
2.生成隨機數
3.對稱加密
4.生成祕鑰對
HTTPS 協議,說白了就是HTTP協議和SSL/TLS協議的組合,能夠把HTTPS大體理解爲:HTTP over SSL。
Https在創建Socket鏈接以前,須要進行握手,單向認證和雙向認證不一樣。
具體過程網上不少,我就摘錄一個 博友 的一個圖,說明下雙向認證的過程:
下一篇就來講說RabbitMQ的性能和安全考慮。
歡迎掃描下方二維碼,關注個人我的微信公衆號,查看更多文章 ~