天天看點

Kafka實戰:叢集SSL加密認證和配置(最新版kafka-2.7.0)

前言概述

   1. JavaSSL認證

       SSL(Secure Socket Layer安全套接層),及其繼任者傳輸層安全(Transport ;ayer Security,TLS)是為網絡通信提供安全及資料完整性的一種安全協定。TLS與SSL在傳輸層對網絡連接配接進行加密。

    2. Kerberos認證 + ACL鑒權

      Kerberos是一種網絡認證協定,其設計目标是通過密鑰系統為客戶機/伺服器應用程式提供強大的認證服務。ACL則是在Kerberos的基礎上進行的鑒權措施,一般Kerberos認證就夠使用了。

SSL證書生成

     Apache的Kafka允許client通過SSL連接配接。SSL預設情況下被禁止,但可以根據需要開啟。

    可以使用Java的keytool工具來完成,Keytool 是一個Java 資料證書的管理工具 ,Keytool 将密鑰(key)和證書(certificates)存在一個稱為keystore的檔案中 在keystore裡,包含兩種資料: 

    1). 密鑰實體(Key entity)——密鑰(secret key)又或者是私鑰和配對公鑰(采用非對稱加密) 

    2). 可信任的證書實體(trusted certificate entries)——隻包含公鑰

    keytool相關指令說明:

<col>

名稱

說明

-alias

别名,可自定義,這裡叫kafka240

-keystore

指定密鑰庫的名稱(就像資料庫一樣的證書庫,可以有很多個證書,cacerts這個檔案是jre自帶的, 也可以使用其它檔案名字,如果沒有這個檔案名字,它會建立這樣一個)

-storepass

指定密鑰庫的密碼

-keypass

指定别名條目的密碼

-list

顯示密鑰庫中的證書資訊

-export

将别名指定的證書導出到檔案

-file

參數指定導出到檔案的檔案名

-import

将已簽名數字證書導入密鑰庫

-keypasswd

修改密鑰庫中指定條目密碼

-dname

指定證書擁有者資訊。

其中,CN=名字與姓氏/域名,OU=組織機關名稱,O=組織名稱,L=城市或區域名稱,ST=州或省份名稱,C=機關的兩字母國家代碼

-keyalg

指定密鑰的算法

-validity

指定建立的證書有效期多少天

-keysize

指定密鑰長度

1. Kafka叢集的每個broker節點生成SSL密鑰和證書(每個broker節執行)

    每個節點執行一次後,叢集中的每一台機器都有一個公私密鑰對、一個辨別該機器的證書,注意這裡是所有的broker節點都要執行這個指令。

    執行指令時,輸入first and last name,這裡需要輸入你的主機名,確定公用名(CN)與伺服器的完全限定域名(FQDN)精确相比對。

    client拿CN與DNS域名進行比較以確定它确實連接配接到所需的伺服器,而不是惡意的伺服器。

2. 生成CA認證證書(為了保證整個證書的安全性,需要使用CA進行證書的簽名保證)

    雖然第一步生成了證書,但是證書是無标記的,意味着攻擊者可以通過建立相同的證書假裝任何機器。認證機構(CA)負責簽發證書。

    認證機構就像發行護照的政府,政府會對每張護照蓋章,使得護照很難被僞造。其它,政府核實印章,以保證此護照是真實的。

    類似的,CA簽署證書,密碼保證簽署的證書在計算上很難被僞造。是以,隻要CA是一個真正值得信賴的權威機構,客戶就可以很高的保證他們正在連接配接到真實的機器。

    這個指令,可随機在任一broker節點執行,隻需要執行一次,執行完成後生成了兩個檔案cat-key、ca-cert,将這兩個檔案分别拷貝到所有broker節點上,後面需要用到。

3. 通過CA憑證建立一個用戶端端信任證書(每個broker節點執行)

4. 通過CA憑證建立一個服務端器端信任證書(每個broker節點執行)

下面就是為證書簽名

5. 從密鑰庫導出證書伺服器端證書cert-file(每個broker節點執行)

6. 用CA給伺服器端證書進行簽名處理(每個broker節點執行)

7. 将CA憑證導入到伺服器端keystore(每個broker節點執行)

8. 将已簽名的伺服器證書導入到伺服器keystore(每個broker節點執行)

Kafka叢集配置

用戶端連接配接配置

測試用例

歡迎關注微信公衆号:大資料從業者