• Kafka实战:集群SSL加密认证和配置(最新版kafka-2.7.0)


    前言概述

       1. JavaSSL认证

           SSL(Secure Socket Layer安全套接层),及其继任者传输层安全(Transport ;ayer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。

        2. Kerberos认证 + ACL鉴权

          Kerberos是一种网络认证协议,其设计目标是通过密钥系统为客户机/服务器应用程序提供强大的认证服务。ACL则是在Kerberos的基础上进行的鉴权措施,一般Kerberos认证就够使用了。

    SSL证书生成

         Apache的Kafka允许client通过SSL连接。SSL默认情况下被禁止,但可以根据需要开启。

        可以使用Java的keytool工具来完成,Keytool 是一个Java 数据证书的管理工具 ,Keytool 将密钥(key)和证书(certificates)存在一个称为keystore的文件中 在keystore里,包含两种数据: 

        1). 密钥实体(Key entity)——密钥(secret key)又或者是私钥和配对公钥(采用非对称加密) 

        2). 可信任的证书实体(trusted certificate entries)——只包含公钥

        keytool相关指令说明:

    名称 说明
    -alias 别名,可自定义,这里叫kafka240
    -keystore

    指定密钥库的名称(就像数据库一样的证书库,可以有很多个证书,cacerts这个文件是jre自带的, 也可以使用其它文件名字,如果没有这个文件名字,它会创建这样一个)

    -storepass

    指定密钥库的密码
    -keypass 指定别名条目的密码
    -list 显示密钥库中的证书信息

    -export

    将别名指定的证书导出到文件
    -file 参数指定导出到文件的文件名

    -import

    将已签名数字证书导入密钥库
    -keypasswd 修改密钥库中指定条目口令

    -dname

    指定证书拥有者信息。

    其中,CN=名字与姓氏/域名,OU=组织单位名称,O=组织名称,L=城市或区域名称,ST=州或省份名称,C=单位的两字母国家代码

    -keyalg 指定密钥的算法
    -validity 指定创建的证书有效期多少天
    -keysize 指定密钥长度

    1. Kafka集群的每个broker节点生成SSL密钥和证书(每个broker节执行)

        每个节点执行一次后,集群中的每一台机器都有一个公私密钥对、一个标识该机器的证书,注意这里是所有的broker节点都要执行这个命令。

    keytool -keystore server.keystore.jks -alias kafka240 -validity 365 -genkey

        执行命令时,输入first and last name,这里需要输入你的主机名,确保公用名(CN)与服务器的完全限定域名(FQDN)精确相匹配。

        client拿CN与DNS域名进行比较以确保它确实连接到所需的服务器,而不是恶意的服务器。

    2. 生成CA认证证书(为了保证整个证书的安全性,需要使用CA进行证书的签名保证)

        虽然第一步生成了证书,但是证书是无标记的,意味着攻击者可以通过创建相同的证书假装任何机器。认证机构(CA)负责签发证书。

        认证机构就像发行护照的政府,政府会对每张护照盖章,使得护照很难被伪造。其它,政府核实印章,以保证此护照是真实的。

        类似的,CA签署证书,密码保证签署的证书在计算上很难被伪造。因此,只要CA是一个真正值得信赖的权威机构,客户就可以很高的保证他们正在连接到真实的机器。

    openssl req -new -x509 -keyout ca-key -out ca-cert -days 36

        这个命令,可随机在任一broker节点执行,只需要执行一次,执行完成后生成了两个文件cat-key、ca-cert,将这两个文件分别拷贝到所有broker节点上,后面需要用到。

      

    3. 通过CA证书创建一个客户端端信任证书(每个broker节点执行)

    keytool -keystore client.truststore.jks -alias CAKafka240 -import -file ca-cert

    4. 通过CA证书创建一个服务端器端信任证书(每个broker节点执行)

    keytool -keystore server.truststore.jks -alias CAKafka240 -import -file ca-cert

    下面就是为证书签名

    5. 从密钥库导出证书服务器端证书cert-file(每个broker节点执行)

    keytool -keystore server.keystore.jks -alias kafka240 -certreq -file cert-file

    6. 用CA给服务器端证书进行签名处理(每个broker节点执行)

    openssl x509 -req -CA ca-cert -CAkey ca-key -in cert-file -out cert-signed -days 365 -CAcreateserial -passin pass:123456

    7. 将CA证书导入到服务器端keystore(每个broker节点执行)

    keytool -keystore server.keystore.jks -alias CAKafka240 -import -file ca-cert

    8. 将已签名的服务器证书导入到服务器keystore(每个broker节点执行)

    keytool -keystore server.keystore.jks -alias kafka240 -import -file cert-signed

    Kafka集群配置

    listeners=SSL://host.name:port

    ssl.keystore.location=/var/private/ssl/server.keystore.jks

    ssl.keystore.password=test1234
    ssl.key.password=test1234
            
    ssl.truststore.location=/var/private/ssl/server.truststore.jks
    ssl.truststore.password=test1234

    ssl.client.auth=required
    security.inter.broker.protocol=SSL
     
     

    客户端连接配置

    security.protocol=SSL
    ssl.truststore.location=/var/private/ssl/client.truststore.jks
    ssl.truststore.password=test1234
    ssl.keystore.location=/var/private/ssl/client.keystore.jks
                
    ssl.keystore.password=test1234
    ssl.key.password=test1234

    测试用例

    kafka-console-producer.sh --broker-list localhost:9093 --topic test --producer.config client-ssl.properties
                
    kafka
    -console-consumer.sh --bootstrap-server localhost:9093 --topic test --consumer.config client-ssl.properties
    欢迎关注微信公众号:大数据从业者
  • 相关阅读:
    iscroll.js & flipsnap.js
    IE8’s Substr() Bug
    chrome扩展,如何阻止浏览自动关闭桌面通知.
    临时邮箱
    多个显示器, window.open的定位
    页面刷新
    PipelineDB Install and Test
    CitusDB UPSERT
    Kafka部署
    ambari-cassandra-service
  • 原文地址:https://www.cnblogs.com/felixzh/p/14661156.html
Copyright © 2020-2023  润新知