kafka SSL加密 —— 筑夢之路

生成SSL證書文件腳本

#!/bin/bash
################################## 設置環境變量 ##############################
BASE_DIR=/mnt/disk/test                           # SSL各種生成文件的基礎路徑
CERT_OUTPUT_PATH="$BASE_DIR/certificates"         # 證書文件生成路徑
PASSWORD=kafka1234567                             # 密碼
KEY_STORE="$CERT_OUTPUT_PATH/kafka.keystore"      # Kafka keystore文件路徑
TRUST_STORE="$CERT_OUTPUT_PATH/kafka.truststore"  # Kafka truststore文件路徑
KEY_PASSWORD=$PASSWORD                            # keystore的key密碼
STORE_PASSWORD=$PASSWORD                          # keystore的store密碼
TRUST_KEY_PASSWORD=$PASSWORD                      # truststore的key密碼
TRUST_STORE_PASSWORD=$PASSWORD                    # truststore的store密碼
CLUSTER_NAME=test-cluster                         # 指定別名
CERT_AUTH_FILE="$CERT_OUTPUT_PATH/ca-cert"        # CA證書文件路徑
CLUSTER_CERT_FILE="$CERT_OUTPUT_PATH/${CLUSTER_NAME}-cert"      # 集群證書文件路徑
DAYS_VALID=365                                    # key有效期
D_NAME="CN=ChengDu, OU=YourDept, O=YourCompany, L=Beijing, ST=Beijing, C=CN" # distinguished name
##############################################################################mkdir -p $CERT_OUTPUT_PATHecho "1. 創建集群證書到keystore......"
keytool -keystore $KEY_STORE -alias $CLUSTER_NAME -validity $DAYS_VALID -genkey -keyalg RSA \
-storepass $STORE_PASSWORD -keypass $KEY_PASSWORD -dname "$DNAME"echo "2. 創建CA......"
openssl req -new -x509 -keyout $CERT_OUTPUT_PATH/ca-key -out "$CERT_AUTH_FILE" -days "$DAYS_VALID" \
-passin pass:"$PASSWORD" -passout pass:"$PASSWORD" \
-subj "/C=CN/ST=Beijing/L=Beijing/O=YourCompany/CN=Xi Hu"echo "3. 導入CA文件到truststore......"
keytool -keystore "$TRUST_STORE" -alias CARoot \
-import -file "$CERT_AUTH_FILE" -storepass "$TRUST_STORE_PASSWORD" -keypass "$TRUST_KEY_PASS" -nopromptecho "4. 從key store中導出集群證書......"
keytool -keystore "$KEY_STORE" -alias "$CLUSTER_NAME" -certreq -file "$CLUSTER_CERT_FILE" -storepass "$STORE_PASSWORD" -keypass "$KEY_PASSWORD" -nopromptecho "5. 簽發證書......"
openssl x509 -req -CA "$CERT_AUTH_FILE" -CAkey $CERT_OUTPUT_PATH/ca-key -in "$CLUSTER_CERT_FILE" \
-out "${CLUSTER_CERT_FILE}-signed" \
-days "$DAYS_VALID" -CAcreateserial -passin pass:"$PASSWORD"echo "6. 導入CA文件到keystore......"
keytool -keystore "$KEY_STORE" -alias CARoot -import -file "$CERT_AUTH_FILE" -storepass "$STORE_PASSWORD" \-keypass "$KEY_PASSWORD" -nopromptecho "7. 導入已簽發證書到keystore......"
keytool -keystore "$KEY_STORE" -alias "${CLUSTER_NAME}" -import -file "${CLUSTER_CERT_FILE}-signed" \-storepass "$STORE_PASSWORD" -keypass "$KEY_PASSWORD" -noprompt

生成的文件說明:?

  • ca-cert:CA文件,不要把該文件拷貝到別的broker機器上!
  • test-cluster-cert-signed:CA已簽發的Kafka證書文件,不要把該文件拷貝到別的broker機器上!
  • test-cluster-cert:Kafka認證文件(包含公鑰和私鑰),不要把該文件拷貝到別的broker機器上!
  • kafka.keystore:Kafka的keystore文件,所有clients端和broker機器上都需要!
  • kafka.truststore:Kafka的truststore文件,所有clients端和broker機器上都需要!

?配置broker端參數

? listeners=PLAINTEXT://:9092,SSL://:9093   # 這里為Kafka broker配置了兩個listeners,一個是明文傳輸;另一個使用SSL加密進行數據傳輸
? advertised.listeners=PLAINTEXT://公網IP:9092,SSL://公網IP:9093  # 因為是云上環境,如果clients通過公網(或外網)去連接broker,那么advertiesd.listeners就必須配置成所在機器的公網IP
? ssl.keystore.location=/mnt/disk/test/certificates/kafka.keystore # 提供SSL keystore的文件
? ssl.keystore.password=kafka1234567 # 提供keystore密碼
? ssl.truststore.location=/mnt/disk/test/certificates/kafka.truststore # 提供SSL truststore的文件
? ssl.truststore.password=kafka1234567 # 提供truststore密碼
? ssl.key.password=kafka1234567        # keystore中的私鑰密碼
? ssl.client.auth=required             # 設置clients也要開啟認證

啟動服務并測試創建topic

$ bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic test --partitions 1 --replication-factor 1
Created topic "test".

配置clients端參數

1. 配置producer.config

bootstrap.servers=kafka1:9093                            # 指定9093端口,即使用SSL監聽器端口
security.protocol=SSL
ssl.truststore.location=/Users/xxx/Downloads/kafka.truststore # 指定truststore文件
ssl.truststore.password=kafka1234567   
ssl.keystore.password=kafka1234567
ssl.keystore.location=/Users/xxx/Downloads/kafka.keystore # 指定keystore文件

2. 測試生產消息

$ bin/kafka-console-producer.sh --broker-list kafka1:9093 --topic test --producer.config producer.config 
>hello, world
>hello, Kafka
>a test message
......

3. 配置consumer.config

security.protocol=SSL
group.id=test-group
ssl.truststore.location=/Users/xxx/Downloads/kafka.truststore # 指定truststore文件 
ssl.truststore.password=kafka1234567 
ssl.keystore.password=kafka1234567
ssl.keystore.location=/Users/xxx/Downloads/kafka.keystore # 指定keystore文件

4. 測試消費消息

$ bin/kafka-console-consumer.sh --bootstrap-server kafka1:9093 --topic test --from-beginning --consumer.config consumer.config 
hello, world
hello, Kafka
a test message

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/12168.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/12168.shtml
英文地址,請注明出處:http://en.pswp.cn/web/12168.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Jenkins構建流程

Jenkins是DevOps【(Development和Operations的混成詞)是一種重視“軟件開發人員(Dev)”和“IT運維技術人員(Ops)”之間溝通合作的文化、運動或慣例)】的重要一環,是一款開源的CI&CD軟件。也就是持續集成…

汽車行業軟件開發V 模型與醫療行業異同,與傳統瀑布開發模型區別

軟件開發在汽車和醫療行業 V 模型的異同 V 模型是一種軟件開發過程中的驗證和確認模型,它被用來表示軟件開發的各個階段和它們的驗證/ 確認活動。 在汽車和醫療行業中,V模型的使用有一些相似之處,但也有一些不同之處。 相同之處: 都使用V 模…

【LeetCode】【滑動窗口】【雙指針】長度最小的子數組

題目:209. 長度最小的子數組 - 力扣(LeetCode) 給定一個含有 n 個正整數的數組和一個正整數 target 。找出該數組中滿足其總和大于等于 target 的長度最小的 連續子數組 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其長度。如…

【Viso畫圖】Viso導出與圖形適配的pdf

step1:選中開發工具點擊shapeSheet,選中頁 step2:進入頁面參數設置窗口,將下面框選的參數設為0,enter后保存 目前效果: step3:選中設計->大小,選擇適應頁面大小或者自己根據圖片調整 目前效果: step4: 以…

【C++】priority_queues(優先級隊列)和反向迭代器適配器的實現

目錄 一、 priority_queue1.priority_queue的介紹2.priority_queue的使用2.1、接口使用說明2.2、優先級隊列的使用樣例 3.priority_queue的底層實現3.1、庫里面關于priority_queue的定義3.2、仿函數1.什么是仿函數?2.仿函數樣例 3.3、實現優先級隊列1. 1.0版本的實現…

android自定義view仿微信聯系人列表

說明:最近碰到一個需求,弄一個類似國家或省份列表,樣式參照微信聯系人 文件列表: step1:主界面 加載列表數據~\app\src\main\java\com\example\iosdialogdemo\MainActivity.java step2:右側列表數據排序~\app\src\com\example\io…

hive自定義udtf函數

udtf,一個輸入,對應多個輸出,實現流程如下 1、繼承genericUDF 2、在initialize中做初始化工作,例如定義輸出的數據格式 3、在process中實現具體的邏輯 參考鏈接 https://blog.csdn.net/qq_34321590/article/details/127412147…

6. 第K小的和-二分

6.第K小的和 - 藍橋云課 (lanqiao.cn) #include <bits/stdc.h> #define int long long #define endl \n using namespace std; int n,m,k,an[100005],bm[100005]; int check(int x){int res0;//序列C中<x的數的個數for(int i0;i<n;i){//遍歷數組A&#xff0c;對于每…

Vue學習v-if與v-else-if

Vue學習v-if與v-else-if 一、前言1、v-if2、v-else-if3、v-else4、示例 一、前言 v-if 和 v-else-if 是 Vue.js 中用于條件渲染的指令&#xff0c;它們通常與 v-else 一起使用。下面我來詳細解釋一下它們的用法和區別&#xff1a; 1、v-if 用法&#xff1a;v-if 是一個指令&…

神級框架!!不要再封裝各種 Util 工具類了【送源碼】

這個工具類就比較厲害了&#xff0c;不過我在 Halo 當中用得最多的還是 HtmlUtil.encode&#xff0c;可以將一些字符轉化為安全字符&#xff0c;防止 xss 注入和 SQL 注入&#xff0c;比如下面的評論提交。 comment.setCommentAuthor(HtmlUtil.encode(comment.getCommentAutho…

Go 面向對象OOP思想

Go語言不是面向對象的語言&#xff0c;只是可以采用面向對象的思維通過一些方法來模擬面向對象。面向對象思維核心就三個點&#xff1a;封裝、繼承、多態 GO語言和傳統的面向對象編程有所區別&#xff0c;并不是純粹的面向對象語言。比如C,Java的面向對象都是基于類的&#xff…

匯聚榮科技:拼多多開店沒有流量應該怎么辦?

拼多多開店沒有流量是一個常見的問題&#xff0c;許多新手商家都會遇到這樣的困境。那么&#xff0c;如何解決這個問題呢?下面從四個方面進行詳細闡述。 一、優化店鋪和商品 首先&#xff0c;要確保店鋪和商品的質量。店鋪要有自己獨特的風格和特色&#xff0c;商品要有高質量…

Allegro如何輸出各層PCB視圖的PDF文件

如何輸出各層PCB視圖的PDF文件 1、說明 用Allegro設計好PCB后&#xff0c;有時需要出各層的PDF文檔出來進行匯報和展示&#xff0c;這時就需要將各層的平面視圖全部以PDF的形式加載出來&#xff0c;具體方法如下。 2、PDF文件的輸出方法&#xff08;以四層板為例&#xff09; …

原子學習筆記7——FrameBuffer 應用編程

Frame 是幀的意思&#xff0c;buffer 是緩沖的意思&#xff0c;所以 Framebuffer 就是幀緩沖&#xff0c;這意味著 Framebuffer 就是一塊內存&#xff0c;里面保存著一幀圖像。 應用程序通過對 LCD 設備節點/dev/fb0&#xff08;假設 LCD 對應的設備節點是/dev/fb0&#xff09;…

css如何實現邊框模糊的效果

其實并不難&#xff0c;用屬性 filter: blur(數字px); 即可。效果如下&#xff1a; 圖上的圓形內有色彩的漸變&#xff0c;同樣也是用filter: blur(數字px); 實現的&#xff0c;代碼如下&#xff1a;、 <template><div id"root" :style"{}">…

ros鍵盤控制程序teleop_twist_keyboard 鍵值含義及用法

在機器人仿真中&#xff0c; 經常會用到鍵盤控制程序teleop_twist_keyboard 對機器人進行控制。但是對各個鍵值是何種含義&#xff0c; 如何操作并沒有任何資料介紹,初次使用時會不知所措。 通過實踐&#xff0c; 發現各個鍵值的作用如下&#xff1a; u-- 向左前方前進 i-- 直…

RIP動態路由協議詳解

目錄 一&#xff1a;RIP協議的基本信息 二&#xff1a;RIP協議中的更新方式 三&#xff1a;RIP協議中的計時器 定時更新器&#xff08;UPDATE timer&#xff09; 無效定時器&#xff08;invalid Timer&#xff09; 垃圾收集定時器&#xff08;garbage collection timer&a…

第五課,輸入函數、布爾類型、比較運算和if判斷

一&#xff0c;輸入函數input() 與輸出函數print()相對應的&#xff0c;是輸入函數input()&#xff0c;前者是把程序中的數據展示給外界&#xff08;比如電腦屏幕上&#xff09;&#xff0c;而后者是把外界&#xff08;比如鍵盤&#xff09;的數據輸入進程序中 input()函數可…

Verilog代碼bug:一種特殊的組合邏輯環

Verilog代碼bug&#xff1a;一種特殊的組合邏輯環 組合邏輯環&#xff08;Combinational Loop&#xff09;是什么&#xff0c;別的文章已經寫的很多了&#xff0c;本文就不贅述了&#xff0c;本文主要記錄遇到過的一種特殊的邏輯環&#xff1b; 代碼如下所示&#xff1a; mo…

MacApp自動化測試之Automator初體驗

今天我們繼續講Automator的使用。 初體驗 啟動Automator程序&#xff0c;選擇【工作流程】類型。從資源庫區域依次將獲取指定的URL、從網頁中獲得文本、新建文本文件三個操作拖進工作流創建區域。 然后修改內容&#xff0c;將獲取指定的URL操作中的URL替換成https://www.cnb…