网站域名的单词,桐乡网站建设,建设工程分包合同,专业企业app开发制作文章目录 官方资料概述制作kakfa证书1.1 openssl 生成CA1.2 生成server端秘钥对以及证书仓库1.3 CA 签名证书1.4 服务端秘钥库导入签名证书以及CA根证书1.5 生成服务端信任库并导入CA根数据1.6 生成客户端信任库并导入CA根证书 2 配置zookeeper SASL认证2.1 编写zk_server_jass… 文章目录 官方资料概述制作kakfa证书1.1 openssl 生成CA1.2 生成server端秘钥对以及证书仓库1.3 CA 签名证书1.4 服务端秘钥库导入签名证书以及CA根证书1.5 生成服务端信任库并导入CA根数据1.6 生成客户端信任库并导入CA根证书 2 配置zookeeper SASL认证2.1 编写zk_server_jass.conf配置2.2 修改zk启动脚本2.3 修改zoo.cfg 配置文件2.4 zk添加jar包2.5 启动zk验证服务 3 配置kafka server端3.1 编写kafka_server_jaas.conf3.2 修改kafka启动脚本3.3 修改server.properties3.4 启动kafka 4 配置kafka client 端5 验证6. 常见问题 官方资料
https://kafka.apache.org/documentation/#security 概述
Kafka的SASL-SSL配置主要用于保护集群的网络传输安全确保客户端与服务器端的通信通过加密和认证机制来保证数据的安全性和访问控制.。
Kafka支持多种安全协议最常见的包括SSL加密传输、SASL认证和ACL访问控制列表。配置SASL-SSL组合可以实现
SSLSecure Sockets Layer为数据传输提供加密防止传输过程中的数据泄露和篡改。SASLSimple Authentication and Security Layer提供身份认证机制。通过配置不同的SASL机制如PLAIN、SCRAM-SHA-256等限制只有经过认证的用户才可以访问Kafka。 制作kakfa证书
1.1 openssl 生成CA
openssl req -x509 -config openssl-ca.cnf -newkey rsa:4096 -sha256 -nodes -out cacert.pem -outform PEMopenssl-ca.cnf内容如下
HOME .
RANDFILE $ENV::HOME/.rnd####################################################################
[ ca ]
default_ca CA_default # 默认的 ca 部分[ CA_default ]
base_dir . # 基本目录
certificate $base_dir/ca/cacert.pem # CA 证书
private_key $base_dir/ca/cakey.pem # CA 私钥
new_certs_dir $base_dir # 签名后的新证书位置
database $base_dir/index/index.txt # 数据库索引文件
serial $base_dir/serial/serial.txt # 当前序列号default_days 1000 # 证书有效期
default_crl_days 30 # 下一个 CRL 之前的有效期
default_md sha256 # 使用的公钥摘要算法默认为 sha256
preserve no # 不保留传递的 DN 排序x509_extensions ca_extensions # 添加到证书的扩展email_in_dn no # 在 DN 中不包含电子邮件
copy_extensions copy # 从 CSR 复制 SAN 到证书####################################################################
[ req ]
default_bits 4096 # 默认密钥位数
default_keyfile cakey.pem # 默认密钥文件
distinguished_name ca_distinguished_name # 默认的区分名
x509_extensions ca_extensions # 默认的 X.509 扩展
string_mask utf8only # 字符串掩码####################################################################
[ ca_distinguished_name ]
countryName Country Name (2 letter code) # 国家/地区名两个字母代码
countryName_default CN # 默认国家/地区stateOrProvinceName State or Province Name (full name) # 州/省名全名
stateOrProvinceName_default SD # 默认州/省名localityName Locality Name (eg, city) # 地区/城市名
localityName_default JN # 默认地区/城市名organizationName Organization Name (eg, company) # 组织名
organizationName_default UNKNOWN # 默认组织名organizationalUnitName Organizational Unit (eg, division) # 组织单位名
organizationalUnitName_default UNKNOWN # 默认组织单位名commonName Common Name (e.g. server FQDN or YOUR name) # 通用名例如服务器 FQDN 或您的姓名
commonName_default HUC # 默认通用名emailAddress Email Address # 电子邮件地址
emailAddress_default testtest.com # 默认电子邮件地址####################################################################
[ ca_extensions ]
subjectKeyIdentifier hash # 主题密钥标识符
authorityKeyIdentifier keyid:always, issuer # 授权密钥标识符
basicConstraints critical, CA:true # 基本约束
keyUsage keyCertSign, cRLSign # 密钥用途####################################################################
[ signing_policy ]
countryName optional
stateOrProvinceName optional
localityName optional
organizationName optional
organizationalUnitName optional
commonName supplied
emailAddress optional####################################################################
[ signing_req ]
subjectKeyIdentifier hash # 主题密钥标识符
authorityKeyIdentifier keyid,issuer # 授权密钥标识符
basicConstraints CA:FALSE # 基本约束
keyUsage digitalSignature, keyEncipherment # 密钥用途 1.2 生成server端秘钥对以及证书仓库
keytool -genkeypair -keystore serverkeystore.jks -alias KafkaKeyStore -validity 3650 -keyalg RSA -storetype pkcs121.3 CA 签名证书
利用服务端秘钥库生成证书请求
keytool -keystore serverkeystore.jks -alias Kafkakeystore -certreq -file cert-file.csrCA签名生成签名证书
openssl ca -config openssl-ca.cnf -policy signing_policy -extensions signing_req -out kafka-cert-signed.cert -days 3650 -infiles ../cert-file.csr1.4 服务端秘钥库导入签名证书以及CA根证书
keytool -keystore serverkeystore.jks -alias Kafkakeystore -import -file kafka-cert-signed.cert
keytool -keystore serverkeystore.jks -alias CARoot -import -file ./ca/ca/cacert.pem1.5 生成服务端信任库并导入CA根数据
keytool -keystore server_truststor.jks -alias CARoot -import -file ./ca/cacert.pem1.6 生成客户端信任库并导入CA根证书
keytool -keystore client_truststor.jks -alias CARoot -import -file ./ca/cacert.pem2 配置zookeeper SASL认证
2.1 编写zk_server_jass.conf配置
文件信息如下
Server {org.apache.kafka.common.security.plain.PlainLoginModule requiredusernamezkpassword1qax#EDC5tgbuser_kafka234BCDefg#;
};其中username与password为zk集群之前认证的用户名密码,user_kafka“234BCDefg#” 代表用户为kafka密码为234BCDefg#kafka认证的用户名以及密码kafka中需要配置
2.2 修改zk启动脚本
添加启动参数如下
-Djava.security.auth.login.configzk_server_jass.conf2.3 修改zoo.cfg 配置文件
添加参数如下
authProvider.1org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthSchemesasl
jaasLoginRenew36000002.4 zk添加jar包
拷贝kafka lib目录下kafka-clients-2.3.0-SNAPSHOT.jar、lz4-.jar、slf4j-api-.jar、slf4j-log4j12-.jar、snappy-java-.jar 五个jar包到zk的lib目录下
2.5 启动zk验证服务 3 配置kafka server端
3.1 编写kafka_server_jaas.conf
添加jass配置文件内容如下
KafkaServer {org.apache.kafka.common.security.plain.PlainLoginModule requiredusernameadminpassword234BCDefg#user_admin234BCDefg#user_alice234BCDefg#;
};
Client {org.apache.kafka.common.security.plain.PlainLoginModule requiredusernamekafkapassword234BCDefg#;
};其中username与password 为kafka集群内部认证的用户名与密码与user_admin或者其他用户保持一致 user_admin234BCDefg#与user_alice234BCDefg#配置用户格式为user_用户名密码 Client 配置zk认证的用户名与密码必须与zk中配置的保持一致
3.2 修改kafka启动脚本
添加启动参数如下
-Djava.security.auth.login.configkafka_server_jaas.conf3.3 修改server.properties 修改监听协议 listenersSASL_SSL://:9093
advertised.listenersSASL_SSL://10.11.106.63:9093配置SSL ssl.keystore.location./ssl/kakfa-server-keystore.jks
ssl.keystore.password1qaz#EDC5tgb
ssl.key.password1qaz#EDC5tgb
ssl.truststore.location./ssl/server_truststor.jks
ssl.truststore.password1qaz#EDC5tgb
ssl.client.authrequired
ssl.enabled.protocolsTLSv1.2,TLSv1.1,TLSv1
ssl.keystore.typeJKS
ssl.truststore.typeJKS
ssl.endpoint.identification.algorithm配置SASL security.inter.broker.protocolSASL_SSL
sasl.mechanism.inter.broker.protocolPLAIN
sasl.enabled.mechanismsPLAIN3.4 启动kafka
验证服务是否正常启动 4 配置kafka client 端
客户端添加参数如下 指定SASL_SSL协议
security.protocolSASL_SSLSASL认证
sasl.mechanismPLAIN
sasl.jaas.configorg.apache.kafka.common.security.plain.PlainLoginModule required username\alice\ password\234BCDefg#\;SSL配置
ssl.truststore.location./ssl/client_truststor.jks
ssl.truststore.password1qaz#EDC5tgb
ssl.endpoint.identification.algorithm5 验证
命令行执行 .\kafka-console-producer.bat --broker-list 127.0.0.1:9093 --topic artisanTest未指定ssl参数则server端日志中会出现以下异常
[2024-05-24 10:20:55,334] INFO [SocketServer brokerId0] Failed authentication with 127.0.0.1/127.0.0.1 (SSL handshake failed) (org.apache.kafka.common.network.Selector)添加SSL 客户端配置文件 client-ssl.properties内容如下
security.protocolSASL_SSL
sasl.mechanismPLAIN
sasl.jaas.configorg.apache.kafka.common.security.plain.PlainLoginModule required username\alice\ password\234BCDefg#\;
ssl.truststore.location./ssl/client_truststor.jks
ssl.truststore.password1qaz#EDC5tgb
ssl.endpoint.identification.algorithm再次执行命令添加配置参数 .\kafka-console-producer.bat --broker-list 127.0.0.1:9093 --topic artisanTest --producer.config client-ssl.properties可正常发送消息 6. 常见问题
测试连接通过Kafka的console-producer和console-consumer客户端工具测试SASL-SSL的连接是否配置正确。SSL握手失败若未正确配置SSL密钥库或信任库可能会遇到SSL handshake failed错误。认证失败若SASL用户名或密码不匹配可能会出现Failed authentication的异常日志。