为 Kafka 准备 SSL 证书
此示例演示如何为 Kafka 代理服务器和客户机创建自签名 SSL 证书。 这些步骤必须在已安装 Kafka 的系统上执行。
关于此任务
过程
-
针对每个 Kafka 代理,生成一个证书。 缺省密码是 password。
使用来自 JVM 包或 Java™ 1.8 的 keytool 实用程序,生成用于存储证书的密钥库文件。
cd $JAVA_HOME/jre/lib/security ../../bin/keytool -keystore server.keystore.jks -alias server_host -validity 365 -genkey -keyalg RSA ../../bin/keytool -keystore client.keystore.jks -alias client_host -validity 365 -genkey -keyalg RSA
- 创建您自己的认证中心以进行签名。
openssl req -new -x509 -keyout ca-key -out ca-cert -days 365
- 使用步骤 2 中生成的认证中心,签署步骤 1 中生成的所有证书。
../../bin/keytool -keystore server.keystore.jks -alias server_host -certreq -file cert-file ../../bin/keytool -keystore client.keystore.jks -alias client_host -certreq -file cert-file
- 将该认证中心和签名证书导入到密钥库中。
../../bin/keytool -keystore server.keystore.jks -alias CARoot -import -file ca-cert ../../bin/keytool -keystore server.keystore.jks -alias server_host -import -file cert-signed
server.keystore.jks 文件包含 ca-cert、cert-signed 和 cert-file。
../../bin/keytool -keystore client.keystore.jks -alias CARoot -import -file ca-cert ../../bin/keytool -keystore client.keystore.jks -alias client_host -import -file cert-signed
client.keystore.jks 文件包含 ca-cert、cert-signed 和 cert-file。
- 将生成的认证中心导入到信任库中。
../../bin/keytool -keystore server.truststore.jks -alias CARoot -import -file ca-cert ../../bin/keytool -keystore client.truststore.jks -alias CARoot -import -file ca-cert
- 将下一节添加到一个或多个 Kafka 代理服务器的 server.properties 中。 然后,启动 Zookeeper 及一个或多个 Kafka 代理服务器。
listeners=SSL://server_host:port ssl.keystore.location=/opt/ibm-java-8/jre/lib/security/server.keystore.jks ssl.keystore.password=yourPassword ssl.key.password=yourPassword ssl.truststore.location=/opt/ibm-java-8/jre/lib/security/server.truststore.jks ssl.truststore.password=yourPassword ssl.client.auth=required ssl.enabled.protocols=TLSv1.2 ssl.truststore.type=JKS ssl.keystore.type=JKS ssl.secure.random.implementation=SHA1PRNG ssl.endpoint.identification.algorithm=
- 配置 Kafka 客户机。 在 $kafka_home/config 目录中,创建包含这些配置设置的 client-ssl.properties 文件。
security.protocol=SSL ssl.truststore.location=/opt/ibm-java-8/jre/lib/security/client.truststore.jks ssl.truststore.password=yourPassword ssl.keystore.location=/opt/ibm-java-8/jre/lib/security/client.keystore.jks ssl.keystore.password=yourPassword ssl.key.password=yourPassword ssl.enabled.protocols=TLSv1.2 ssl.truststore.type=JKS ssl.keystore.type=JKS ssl.endpoint.identification.algorithm=
- 启动 kafka-console-producer 和 kafka-console-consumer,以验证客户机与服务器之间的通信。 要启动 kafka-console-producer:
$kafka_home/bin/kafka-console-producer.sh --broker-list erver_host:port --topic yourTopic --producer.config $kafka_home/config/client-ssl.properties
要启动 kafka-console-consumer:$kafka_home/bin/kafka-console-consumer.sh --bootstrap-server erver_host:port --topic yourTopic --from-beginning --consumer.config $kafka_home/config/client-ssl.properties