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="kafka-client-1@EXAMPLE.COM";
};
然后在使用jvm参数
-Djava.security.auth.login.config=…/kafka.client.conf也是可以的
另外还有一条
同一个用户名和密码 可以在多个java客户端使用