搭建单机kafka-验证SSL
安装版本 2.3.1 -> 所有密码均为123456
1.通过wget命令下载kafka镜像文件
wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.3.1/kafka_2.11-2.3.1.tgz
2.解压缩kafka镜像文件并复制到opt目录下
tar -xzf kafka_2.11-2.3.1.tgz -C /opt
3.重命名kafka
cd /opt
mv kafka_2.11-2.3.1/ kafka
4.修改kafka server.properties
listeners=PLAINTEXT://192.168.30.205:9092 --> 修改配置映射kafka连接地址
zookeeper.connect=192.168.30.205:2181 --> 修改配置映射zookeeper连接地址
4.启动
nohup bin/zookeeper-server-start.sh config/zookeeper.properties > zookeeper-run.log 2>&1 &
nohup bin/kafka-server-start.sh config/server.properties > kafka-run.log 2>&1 &
5.生成临时秘钥库
keytool -keystore server.keystore.jks -alias localhost -validity 365 -genkey -keyalg RSA
6.生成CA证书签名机构
7.将生成的CA添加到clients’ truststore(客户的信任库),以便client可以信任这个CA
keytool -keystore client.truststore.jks -alias CARoot -import -file ca-cert
8.如果你通过设置kafka Broker 配置文件的ssl.client.auth属性为"requested" 或者"required",来配置kafka Broker 要求客户端认证。那你必须为kafka Broker提供信托库及所有客户端签名了的CA证书密匙
keytool -keystore server.truststore.jks -alias CARoot -import -file ca-cert
9.需要从密钥库导出证书:
keytool -keystore server.keystore.jks -alias localhost -certreq -file cert-file
10.CA签名:
openssl x509 -req -CA ca-cert -CAkey ca-key -in cert-file -out cert-signed -days {validity} -CAcreateserial -passin pass:{ca-password}
11.将CA证书和签名的证书导入到密钥库中:
keytool -keystore server.keystore.jks -alias CARoot -import -file ca-cert
keytool -keystore server.keystore.jks -alias localhost -import -file cert-signed
12.配置监听端口(修改kafka server.properties)
listeners=PLAINTEXT://192.168.30.205:9092,SSL://192.168.30.205:9093
ssl.keystore.location=/opt/kafka/server.keystore.jks
ssl.keystore.password=123456
ssl.key.password=123456
ssl.truststore.location=/opt/kafka /server.truststore.jks
ssl.truststore.password=123456
13.配置消费端生产端(java)
propsMap.put("security.protocol", "SSL");
propsMap.put("ssl.truststore.location", path+"key/server.truststore.jks");
propsMap.put("ssl.truststore.password", "123456");
propsMap.put("ssl.keystore.location", path+"key/server.keystore.jks");
propsMap.put("ssl.keystore.password", "123456");
propsMap.put("ssl.key.password", "123456");
//去除主机验证
propsMap.put("ssl.endpoint.identification.algorithm","");