前言概述
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叢集配置
用戶端連接配接配置
測試用例
歡迎關注微信公衆号:大資料從業者