一、生成CA证书

1  生成根证书的私钥
openssl genrsa -out ./ca.key
 
2  利用私钥生成一个根证书的申请,一般证书的申请格式都是csr。所以私钥和csr一般需要保存好
openssl req -new -key ca.key -out ca.csr
 
3  自签名的方式签发我们之前的申请的证书,生成的证书为ca.crt
openssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.crt

4 为我们的证书建立第一个序列号,一般都是用4个字符,这个不影响之后的证书颁发等操作

echo FACE(01) > $path/serial。

5 建立ca的证书库,不影响后面的操作,默认配置文件里也有存储的地方。

touch $path/index.txt

6 建立证书回收列表保存失效的证书

openssl ca -gencrl -out $path/ca.crl -crldays 7

$path 为openssl配置文件设置的路径,第4,5,6步可在此不操作,等后续签发证书报错时候根据报错内容添加

二、生成服务端证书

# 建立服务器验证证书的私钥
openssl genrsa -out server.key
 
# 生成证书申请文件,制作签发证书的请求文件时,需要输入Common Name参数,此参数一定为当前主机的IP地址,否则将会显示证书错误。
openssl req -new -key server.key -subj "/CN=本机IP" -out server.csr
# CN=后为本机IP
 
echo subjectAltName = IP:"本机IP" > extfile.cnf
 
# 利用根证书签发服务器身份验证证书
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out server.crt -days 5000

三、生成客户端证书

# 生成私钥
openssl genrsa  -out client.key 1024
 
# 生成证书请求文件
openssl req -new -key client.key -out  client.csr

# 签发证书
openssl ca -in client.csr -cert ca.crt -keyfile ca.key -out client.crt

四、通过CA证书生成kafka端可信任证书和filebeat端可信任证书

# 生成filebeat端可信任证书
cat ca.crt >  client/filebeat.cert.pem

# 生成kafka端可信任证书
keytool -importcert -file ca.crt -alias ca -noprompt -storepass 123456 -keystore server/kafka_trustchain.jks

五、生成kafka端keystore文件

# create pkcs12 store
openssl pkcs12 -export -out server/localhost.pkcs12 -in server/server.crt -inkey server/server.key -passout "pass:123456"

# import server key into jks keystore
echo "123456" | keytool -importkeystore -srckeystore server/localhost.pkcs12 -destkeystore server/localhost.jks -srcstoretype pkcs12 -storepass "123456"

六、kafka配置

listeners=SSL://192.168.244.145:9092
advertised.listeners=SSL://192.168.244.140:9092

ssl.enabled.protocols=TLSv1.2,TLSv1.1,TLSv1
ssl.keystore.type=JKS
ssl.truststore.type=JKS

security.inter.broker.protocol=SSL
# ssl.endpoint.identification.algorithm=

ssl.keystore.location=/root/kafka/kafka_2.11-2.4.0/ca/server/localhost.jks
ssl.keystore.password=123456
ssl.key.password=123456
ssl.truststore.location=/root/kafka/kafka_2.11-2.4.0/ca/server/kafka_trustchain.jks
ssl.truststore.password=123456
ssl.client.auth=required

七、验证证书是否配置正确

openssl s_client -connect 192.168.244.145:9092 -tls1_2 -CAfile ca/client/filebeat.cert.pem

       # 出现以下提示,说明验证成功

八、filebeat SSL配置

# 将第三步与第四步生成的客户端证书与filebeat认证证书copy到filebeat所在服务器端

# filebeat输出到kafka关于ssl配置的部分

ssl.enabled: true
ssl.key: "/home/python/Desktop/filebeat-7.9.2-linux-x86_64/certs/client.key"
ssl.certificate: "/home/python/Desktop/filebeat-7.9.2-linux-x86_64/certs/client.crt"
ssl.certificate_authorities: ["/home/python/Desktop/filebeat-7.9.2-linux-x86_64/certs/trustchain.cert.pem"]

九、创建kafka消费者配置文件,监听filebeat发来的消息

    1、创建消费者配置文件ssl.properties:

security.protocol=SSL
ssl.endpoint.identification.algorithm=
ssl.keystore.location=/root/kafka/kafka_2.11-2.4.0/ca/server/localhost.jks
ssl.keystore.password=123456
ssl.key.password=123456
ssl.truststore.location=/root/kafka/kafka_2.11-2.4.0/ca/server/kafka_trustchain.jks
ssl.truststore.password=123456
ssl.client.auth=required

     2、启动消费者

./bin/kafka-console-consumer.sh --bootstrap-server 192.168.244.145:9092 --topic test_zml --consumer.config ssl.properties

十、结果呈现

        1、启动filebeat

        2、filebeat发送消息,此时能正常发送到kafka,结果如图所示,说明ssl配置成功:

   

        3、此时如果filebeat关闭ssl,此时发送消息则如图所示,显示消息一直未发送成功,该步骤证明我们配置ssl起了作用

        

十一:参考文档:

       TLS For Filebeat To Kafka:https://discuss.elastic.co/t/tls-for-filebeat-kafka-output/58756/3

       SSL认证之相关证书的生成: https://blog.csdn.net/justry_deng/article/details/88383081

       Kafka配置SSL认证: https://blog.csdn.net/justry_deng/article/details/88383707

       kafka使用SSL加密和认证: https://www.orchome.com/171

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐