1 kafka传输层(TLS)加密
传输层加密用于保护在Kafka集群内以及Kafka客户端与服务器之间传输的数据。Kafka通过SSL/TLS(安全套接层/传输层安全)协议来实现传输层加密。
2 获取client证书
这里我们的kafka集群已经加密,所以我们直接获取用于加密的cert证书,k8s中证书一般都是存放在secret里,
bash
kubectl get secret kafka-tls-secret -o=jsonpath='{.data.certificate\.crt}' -n kafka | base64 --decode > client.crt
3 连接集群
3.1 使用PEM格式证书
有了证书,我们就可以开始连接kafka集群了,配置ssl-config.properties如下,
bash
$ cat ssl-config.properties
security.protocol=SSL
ssl.truststore.location=/kafka/client.crt
ssl.truststore.type=PEM
其中,ssl.truststore.location替换成对应证书的路径。
连接kafka集群时,指定使用该配置文件,
bash
$ kafka-topics --bootstrap-server kafka-bootstrap:9093 --command-config ssl-config.properties --list
__consumer_offsets
...
使用PEM格式证书有个问题,证书是明文的,没有加密,如果要加密证书可以使用JKS格式或者PKCS12格式。
3.2 使用JKS格式证书
我们需要使用keytool工具将cet证书转成JKS证书,
bash
keytool -keystore truststore.jks -storepass keystore_password -noprompt -import -file client.crt -trustcacerts -storetype JKS
其中,
keystore,指定jks证书名字
storepass,指定加密证书的密码
file,指定导入的crt证书名字
storetype,指定最终生成证书格式
导入后可以查看确认下信息,
bash
$ keytool -list -keystore truststore.jks -storepass keystore_password
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
mykey, Jun 5, 2024, trustedCertEntry,
Certificate fingerprint (SHA-256): AE:C3...
连接kafka集群时,ssl-config.properties设置如下,需要添加密码设置,ssl.truststore.password
bash
$ cat ssl-config.properties
security.protocol=SSL
ssl.truststore.location=/kafka/truststore.jks
ssl.truststore.password=keystore_password
ssl.truststore.type=JKS
3.3 使用PKCS12格式证书
storetype设置为PKCS12即可,
bash
keytool -keystore truststore.p12 -storepass keystore_password -noprompt -import -file client.crt -storetype PKCS12
同样ssl-config.properties里的格式也需要修改
bash
$ cat ssl-config
security.protocol=SSL
ssl.truststore.location=/kafka/truststore.p12
ssl.truststore.password=keystore_password
ssl.truststore.type=PKCS12
参考文档: