1. 程式人生 > >讓數據傳輸更安全

讓數據傳輸更安全

RabbitMQ

在閱讀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的性能和安全考慮。

歡迎掃描下方二維碼,關註我的個人微信公眾號,查看更多文章 ~

技術分享圖片

讓數據傳輸更安全