zoukankan      html  css  js  c++  java
  • 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
    欢迎关注微信公众号:大数据从业者
  • 相关阅读:
    leetcode 279. Perfect Squares
    leetcode 546. Remove Boxes
    leetcode 312. Burst Balloons
    leetcode 160. Intersection of Two Linked Lists
    leetcode 55. Jump Game
    剑指offer 滑动窗口的最大值
    剑指offer 剪绳子
    剑指offer 字符流中第一个不重复的字符
    leetcode 673. Number of Longest Increasing Subsequence
    leetcode 75. Sort Colors (荷兰三色旗问题)
  • 原文地址:https://www.cnblogs.com/felixzh/p/14661156.html
Copyright © 2011-2022 走看看