kafka配置ssl加密

1.背景:

之前的证书过期了,kafka的服务日志一直报

Failed authentication with /ip (SSL handshake failed)

生产者报的错误

PKIX path validation failed: java.security.cert.CertPathValidatorException: timestamp check failed

2.重新生成

一) 生成认证文件

1) 为每个Kafka broker生成SSL密钥和证书。

keytool -keystore server.keystore.jks -alias localhost -validity 365 -genkey

在这里插入图片描述

解释:

  1. keystore: 密钥仓库存储证书文件。密钥仓库文件包含证书的私钥(保证私钥的安全)。
  2. validity: 证书的有效时间,天

2) (执行完第1步后爆出警告)执行以下命令

keytool -importkeystore -srckeystore server.keystore.jks -destkeystore server.keystore.jks -deststoretype pkcs12

在这里插入图片描述

查看证书list

keytool -list -v -keystore server.keystore.jks

3) 创建自己的CA证书

3.1 openssl req -new -x509 -keyout ca-key -out ca-cert -days 365

如果是kafka集群,3.1这一步只需要在某一个节点执行,然后分发到其余节点,再执行一下命令(除了这步,其余的命令都需要每个节点执行)

其中PEM pass phrase就是之前输入的密库玥口令

3.2 keytool -keystore server.truststore.jks -alias CARoot -import -file ca-cert

3.3 keytool -keystore client.truststore.jks -alias CARoot -import -file ca-cert

执行到这里我的目录下有这些文件

在这里插入图片描述

4) 签名证书

4.1 keytool -keystore server.keystore.jks -alias localhost -certreq -file cert-file
4.2 openssl x509 -req -CA ca-cert -CAkey ca-key -in cert-file -out cert-signed -days 365 -CAcreateserial
4.3 keytool -keystore server.keystore.jks -alias CARoot -import -file ca-cert
4.4 keytool -keystore server.keystore.jks -alias localhost -import -file cert-signed

在这里插入图片描述

因为本次我是属于证书失效,只要把server.keystore.jks,server.truststore.jks,client.truststore.jks放到对应的位置,然后重启kafka服务就好了。

二) kafka的server文件相关SSL的配置(之前配置过,可忽略)

listeners=PLAINTEXT://0.0.0.0:9965,SSL://0.0.0.0:9955
advertised.listeners=PLAINTEXT://localhost:9965,SSL://localhost:9955
ssl.keystore.location=/home/sdut/ssl/server.keystore.jks
ssl.keystore.password=sdut123456
ssl.key.password=sdut123456
ssl.truststore.location=/home/sdut/ssl/server.truststore.jks
ssl.truststore.password=sdut123456
ssl.client.auth=none

三) 客户端连接kafka的相关配置(之前配置过,可忽略)

consumer和producer连接信息均是增加这三项配置

props.put("security.protocol", "SSL");
props.put("ssl.truststore.location", "D:/client.truststore.jks");
props.put("ssl.truststore.password", "sdut123456");

四)重启kafka服务


版权声明:本文为jason_9527原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。