为 Kafka 准备 SSL 证书

此示例演示如何为 Kafka 代理服务器和客户机创建自签名 SSL 证书。 这些步骤必须在已安装 Kafka 的系统上执行。

关于此任务

使用您在此任务中配置的安全元素以在在进行用户名与密码认证的情况下通过 SSL 连接到 Kafka中完成安全连接配置。

过程

  1. 针对每个 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
  2. 创建您自己的认证中心以进行签名。
    openssl req -new -x509 -keyout ca-key -out ca-cert -days 365
  3. 使用步骤 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 
  4. 将该认证中心和签名证书导入到密钥库中。
    
    ../../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-certcert-signedcert-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-certcert-signedcert-file

  5. 将生成的认证中心导入到信任库中。
    
    ../../bin/keytool -keystore server.truststore.jks -alias CARoot -import -file ca-cert
    ../../bin/keytool -keystore client.truststore.jks -alias CARoot -import -file ca-cert
  6. 将下一节添加到一个或多个 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=
  7. 配置 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=
  8. 启动 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