为 Kafka 设置 SASL 和 SSL

分享
开发者 2024-9-4 10:51:14 23 0 来自 中国
SASL设置

使用 SASL/PLAIN 举行身份验证

SASL/PLAIN 是一种简单的用户名/暗码认证机制。 Kafka 支持 SASL/PLAIN 的默认实现,下面将详细形貌如作甚Kafka设置SASL/PLAIN。

  • 在每个 Kafka Broker 的设置目次中(比方:/home/chen/kafka_2.12-0.11.0.0/config,后文将使用{KAFKA_HOME}代表/home/chen/kafka_2.12-0.11.0.0)添加一个颠末得当修改的 JAAS 文件,雷同于下面的文件,我们将其定名为 kafka_server_jaas.conf 以用于本示例:
KafkaServer {org.apache.kafka.common.security.plain.PlainLoginModule requiredusername="admin"password="admin-secret"user_admin="admin-secret"user_alice="alice-secret";};此设置界说了两个用户(admin 和 alice)。 KafkaServer中的属性username和password由Broker用于启动与其他Broker的毗连。 在本例中,admin 是Broker间通讯的用户。 属性集 user_username 界说了毗连到Broker的全部用户的暗码,Broker使用这些属性验证全部客户端毗连,包罗来自其他Broker的毗连。

  • 将 JAAS 设置文件位置作为 JVM 参数通报给每个 Kafka Broker
export KAFKA_OPTS="-Djava.security.auth.login.config={KAFKA_HOME}/config/kafka_server_jaas.conf"

  • 在 server.properties 中设置 SASL 端口和 SASL 机制。 比方:
listeners=SASL_PLAINTEXT://{server_host}:9092security.inter.broker.protocol=SASL_PLAINTEXTsasl.mechanism.inter.broker.protocol=PLAINsasl.enabled.mechanisms=PLAIN

  • 末了,通过Kafka Assistant ( http://www.redisant.cn/ka )举行毗连
使用 SASL/SCRAM-SHA-256 举行身份验证

TODO
使用 SASL/SCRAM-SHA-512 举行身份验证

TODO
SSL设置

为简单起见,我们将只设置一个署理和客户端,但我们还将在此过程中记载您必要为更复杂的设置做什么。
在您完成这些分析时,您必要多次指定署理 {server_hostname} 和客户端 {client_hostname} 呆板的名称。 理想环境下,您将使用呆板的完全限定域名 (Fully Qualified Domain Name, FQDN),但假如您尚未为呆板分配主机名,则可以使用 IP 地点。 假如您只是在举行试验,而且计划在同一台呆板上运行署理和客户端,那么两者都使用 localhost 或 127.0.0.1 也是可以的。
单向 SSL/TLS


  • 与网站的 HTTPS 毗连完全雷同的设置。
  • 客户端验证署理的身份——即客户端可以确定它正在与预期的署理举行通讯,而不是假冒者,因此可以免受中心人攻击。
  • 通讯是加密的。
  • 服务器不验证客户端的身份(不对客户端举行身份验证)——任何客户端都可以毗连到服务器。
步调:
第一步:为署理创建私钥/公钥证书对:
留意:您必要对集群中的每个署理重复此步调。
留意:我们使用 Java 附带的 keytool 实用步伐来执行此任务,由于它根据署理的要求将天生的密钥/证书对存储在 JKS 容器中。
keytool -keystore server.keystore.jks -alias {server_hostname} -validity 365 -genkey -keyalg RSA这将:

  • 在当前目次中创建一个新的密钥库 server.keystore.jks。
  • 提示您输入暗码以掩护密钥库。
  • 天生新的公钥/私钥对并提示您输入制作公钥证书所需的其他信息。 总的来说,此信息称为可分辨名称 (Distinguishing Name, DN)。

    • 您必要将 CN(“What is your first and last name?”标题的答案)设置为 {server_hostname}。 其他信息对于我们的目的均不告急。
    • 您还可以通过下令行 -dname 参数设置 DN,如下所示: -dname "cn={server_hostname}"

  • 将私钥和自署名公钥证书存储在密钥库文件中的别名 {server_hostname} 下。

    • 体系将提示您输入暗码以掩护密钥库中的此特定密钥/证书对。
    • 大概,您可以使用 -storepass 和 -keypass 下令行参数设置暗码。

比方,我的{server_hostname}为kago,那么在我呆板上执行的下令现实为:
keytool -keystore server.keystore.jks -alias kago -validity 365 -genkey -keyalg RSA -dname "CN=kago, OU=IT, O=Redisant, L=XIAN, ST=SHANXI, C=CN"第二步:创建证书颁发机构 (CA) 私钥/根证书:
告急提示:不要试图通过使用自署名证书(克制使用 CA)来简化设置过程 - 这不安全(轻易受到中心人攻击)。
openssl req -nodes -new -x509 -keyout ca-root.key -out ca-root.crt -days 365大概也可以天生.pem格式的证书
openssl req -nodes -new -x509 -keyout ca-root.key -out ca-root.pem -days 365这将:

  • 提示您输入 DN 信息以放入证书。 对于我们的目的,这些都不是必须的,但是,您可以使用 -subj 下令行参数来克制提示。 比方:-subj "/C=CN/ST=SHANXI/L=CHANGAN/O=Redisant/CN=Redisant"
  • 创建一个私钥/自署名公钥证书对,此中私钥不受暗码掩护。
  • 假如您想用暗码掩护私钥,请省略 -nodes 标志,体系将提示您输入暗码。
比方,在我的呆板上,这一步现实执行的下令为:
openssl req -new -x509 -keyout ca-root.key -out ca-root.crt -days 365 -subj "/C=CN/ST=SHANXI/L=CHANGAN/O=Redisant/CN=Redisant"第三步:签署Broker公钥证书:

  • 从您在步调 1 中创建的位于服务器密钥库文件中的自署名证书天生证书署名请求 (CSR):
keytool -keystore server.keystore.jks -alias {server_hostname} -certreq -file {server_hostname}_server.csr

  • 使用您在步调 2 中天生的 CA 密钥对从您刚刚创建的 CSR 创建 CA 署名证书:
openssl x509 -req -CA ca-root.crt -CAkey ca-root.key -in {server_hostname}_server.csr -out {server_hostname}_server.crt -days 365 -CAcreateserial

  • 将此署名证书导入您的服务器密钥库(覆盖现有的自署名证书)。 在执行此操作之前,您还必要添加 CA 公钥证书:
keytool -keystore server.keystore.jks -alias CARoot -import -noprompt -file ca-root.crtkeytool -keystore server.keystore.jks -alias {server_hostname} -import -file {server_hostname}_server.crt末了一步:设置Broker署理和客户端
您如今拥有设置署理和客户端所需的统统。
Broker设置:
listeners=PLAINTEXT://{server_hostname}:9092,SSL://{server_hostname}:9093ssl.keystore.location=/path/to/keystore/file/server.keystore.jksssl.keystore.type=JKSssl.keystore.password=test1234ssl.key.password=test1234Kafka Assistant客户端设置:
2.png
留意,假如您创建的是ca-root.pem格式的证书,必要转换成.crt格式,Kafka Assistant才气辨认:
openssl x509 -in ca-root.pem -out ca-root.crt双向 SSL/TLS(单向 SSL/TLS + SSL 客户端身份验证)


  • 单向 SSL/TLS 提供的功能,以及:
  • 服务器验证客户端的身份(即客户端提供的公钥证书已由服务器信托的 CA 署名)。
步调:
第一步:为客户端创建私钥/公钥证书对
Kafka Assistant客户端不是基于 Java 的,因此不使用 Java 的 JKS 容器格式来存储私钥和证书。 我们将使用 openssl 为客户端创建密钥/证书对,而不是像我们为署理创建的 keytool。
第一步是创建证书署名请求 (CSR)。 留意:不必要像我们为署理所做的那样起首显式创建自署名证书。
openssl req -newkey rsa:2048 -nodes -keyout {client_hostname}_client.key -out {client_hostname}_client.csr这将提示您输入一组尺度公钥证书字段值,这些对于我们的目的并不告急。
您还将被提示输入暗码。 您可以在此处输入空缺暗码,或设置暗码。
如今您有了 CSR,您可以天生 CA 署名证书,如下所示:
openssl x509 -req -CA ca-root.crt -CAkey ca-root.key -in {client_hostname}_client.csr -out {client_hostname}_client.crt -days 365 -CAcreateserial 第二步:创建一个包罗 ca-root.crt 的信托库
署理如今必要访问 CA 根证书,以查抄客户端提供的证书的有效性。 创建包罗 CA 根证书的信托库(另一个 JKS 容器文件),如下所示:
keytool -keystore server.truststore.jks -alias CARoot -import -file ca-root.crt第三步:设置署理和客户端
署理设置:
listeners=PLAINTEXT://{server_hostname}:9092,SSL://{server_hostname}:9093ssl.keystore.location=/path/to/keystore/file/server.keystore.jksssl.keystore.type=JKSssl.keystore.password=test1234ssl.key.password=test1234ssl.truststore.location=/path/to/truststore/file/server.truststore.jksssl.truststore.type=JKSssl.truststore.password=test1234ssl.client.auth=requiredKafka Assistant客户端设置:
3.png SASL_SSL设置

TODO
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-19 15:42, Processed in 0.151745 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表