天天看點

kafka消息加密(SASL/PLAIN)kafka消息加密(SASL/PLAIN)

kafka消息加密(SASL/PLAIN)

具體的配置方式官網已經說的很清楚了(盡量去官網看)

官網配置

分為以下幾個步驟

  • 1、 在conf檔案目錄下添加檔案kafka_server_jaas.conf(檔案目錄 檔案名随意)内容如下
KafkaServer {
    org.apache.kafka.common.security.plain.PlainLoginModule required
    username="admin"
    password="admin-secret"
    user_admin="admin-secret"
    user_alice="alice-secret";
};
           

第一行 暫時不清楚幹嘛

第二行 用戶端連接配接的時候 可以使用這個使用者名admin

最後兩行的意思是 使用admin 密碼得是 admin-secret 使用alice 密碼得是alice-secret

至于如何擴充應該知道了

  • 2、 修改配置檔案

一般啟動指令後面 會指定配置檔案 一般是server.properties 也可以自定義 我們以它為例

添加如下配置

listeners=SASL_SSL(SASL_PLAINTEXT)://host.name:port
 security.inter.broker.protocol=SASL_SSL(SASL_PLAINTEXT)
 sasl.mechanism.inter.broker.protocol=PLAIN
 sasl.enabled.mechanisms=PLAIN
           
這裡要将原來的 listeners改為上面的樣子同時協定要保持一緻
  • 3、 修改啟動檔案

win下和liunix會有些許不同 但是修改的檔案的檔案名都是一樣的kafka-run-class

找到最下方(我的是win)

set COMMAND=%JAVA% %KAFKA_HEAP_OPTS% %KAFKA_JVM_PERFORMANCE_OPTS% %KAFKA_JMX_OPTS% %KAFKA_LOG4J_OPTS% -cp %CLASSPATH% %KAFKA_OPTS% %*
rem echo.
rem echo %COMMAND%
rem echo.
%COMMAND%
           

添加

set KAFKA_SASL_OPTS=-Djava.security.auth.login.config=D:/myprogram/kafka/config/kafka_server_jaas.conf
set後面的名字随便起
然後
set COMMAND=%JAVA% %KAFKA_HEAP_OPTS% %KAFKA_JVM_PERFORMANCE_OPTS% %KAFKA_JMX_OPTS% %KAFKA_LOG4J_OPTS% %KAFKA_SASL_OPTS% -cp %CLASSPATH% %KAFKA_OPTS% %*
在原來的COMMAND 裡面把KAFKA_SASL_OPTS這個加進去 加到-cp的前面
           

上面的三步處理完 你的kafka服務就可以啟動了

Java用戶端配置

這邊要做的就很少了 隻要在配置檔案裡加上如下配置就可以了
spring:
  kafka:
    bootstrap-servers: 127.0.0.1:9092
    consumer:
      group-id: tst-1
      auto-offset-reset: earliest
      properties:
        security.protocol: SASL_PLAINTEXT
        sasl.mechanism: PLAIN
        #sasl.jaas.config: org.apache.kafka.common.security.plain.PlainLoginModule required  username="admin"  password="admin-secret";
        sasl.jaas.config: org.apache.kafka.common.security.plain.PlainLoginModule required  username="alice" password="alice-secret";
           

對上面的配置進行簡單的說明

group-id 這個在啟用機密後 就必須配置了 不然會報錯

@KafkaListener annotation; a group.id is required when group management is used.

這個我覺得應該是伺服器要識别這個消費者吧 用id辨別

security.protocol: SASL_PLAINTEXT

sasl.mechanism: PLAIN

上面的這兩個要和伺服器端使用的保持一緻

最後的這個配置 sasl.jaas.config 後面的值一定要用分号結尾 另外這個值也可以儲存到檔案中 kafka.client.conf

KafkaClient {
 com.sun.security.auth.module.Krb5LoginModule required
 useKeyTab=true
 storeKey=true
 keyTab="/etc/security/keytabs/kafka_client.keytab"
 principal="[email protected]";
};
           

然後在使用jvm參數

-Djava.security.auth.login.config=…/kafka.client.conf也是可以的

另外還有一條

同一個使用者名和密碼 可以在多個java用戶端使用