当前位置:   article > 正文

Kafka ssl 配置_qawvj

qawvj

Kafka SSL配置说明

所有配置主要参考官网文档。部分openssl操作可以参考:https://blog.csdn.net/bbwangj/article/details/82503675 这篇文章介绍。实际不需要记那么多。

操作

下载kafka_2.12-2.3.0并解压

  1. macBook:kafka_2.12-2.3.0 nobleyd$ pwd
  2. /Applications/softwares/kafka_2.12-2.3.0
  3. macBook:kafka_2.12-2.3.0 nobleyd$ ls
  4. LICENSE NOTICE bin config libs site-docs
  5. macBook:kafka_2.12-2.3.0 nobleyd$

创建相关目录

  1. macBook:kafka_2.12-2.3.0 nobleyd$ mkdir ssl
  2. macBook:kafka_2.12-2.3.0 nobleyd$ cd ssl/
  3. macBook:ssl nobleyd$ ls
  4. macBook:ssl nobleyd$ mkdir ca
  5. macBook:ssl nobleyd$ mkdir client
  6. macBook:ssl nobleyd$ mkdir server
  7. macBook:ssl nobleyd$ ls
  8. ca client server
  9. macBook:ssl nobleyd$

创建CA的key和cer

  • 生成CA私钥(key)
  1. macBook:ssl nobleyd$ pwd
  2. /Applications/softwares/kafka_2.12-2.3.0/ssl
  3. macBook:ssl nobleyd$
  4. macBook:ssl nobleyd$ openssl genrsa -out ca/ca.key 2048
  5. Generating RSA private key, 2048 bit long modulus
  6. .......................+++
  7. .......................+++
  8. e is 65537 (0x10001)
  9. macBook:ssl nobleyd$
  10. macBook:ssl nobleyd$ cat ca/ca.key
  11. -----BEGIN RSA PRIVATE KEY-----
  12. MIIEpQIBAAKCAQEAvqsYmyrQi26YvFYPpWeOqrqH4c3krPExmseHOGb5QcqkJJpD
  13. IgxSeJ44/1yo0/ROy0L2bRVq6i1Mn/24k4RUiFBZfSZ7DuUSAFvQzUDi796LoJNu
  14. giU0HaqgU8OcBs3znVxOneMbbO7BtRWhBd9Ef1fgIy9/gfFeDYjDoS7+mzGJwxAR
  15. k/zw3Hkn411RejadEhtN+aazHfgnTnm8BDLEDekFI8gCit/jCRjvFpSdDSVIGBPz
  16. 8vfg4BHl7d2FE9AH4R5vK1DX0fkJh4z323ghf7/Wi5C+Vp9vXp+HnE/FDRt9++x/
  17. mpgwS726unVQop6Xi2D8zir5nIfEf4Pc4OMWLwIDAQABAoIBAEjjJSPkCRbUL4UH
  18. rTGA1fQEHH/AcqN+DIVrsxBnpO92pKrtYa55YWmEqqtL46oq4ZgoQAXRQy7EJF+g
  19. 4VdbJel6Nct202INRYVnk/lyzY3+2AeJdJxB1ptkp6d9xn5/apqEN/V5ZPmOh/RO
  20. kWCqSggYMrGgrbCh8V9hIc/TJDd03nzVqJK4zy8asiLfzRXbQ0kKdVNW8VNxKcwA
  21. ohBO1cT719jPID4GYr1ihptB3O8cfmLMeeQ4tIvV9YgzagSjR63Ut/RYhqGQ6fGL
  22. Zv3lhzDxHNTJNECSDsi8vNZ8Lsd0NTRKoOBoxmPZHB7sCeXKJRfYYd+WDdyqtXsf
  23. /chWc0ECgYEA5NmZNP8oDVjNXOwcX6fTg9biQmjvSwJ5THBimYfZkqNMQIRBx1fR
  24. tiP5s32LvlL0A5/gPMfdagu65KQE7VVHR+CUEQ06FByMpr0EijDdGafX7tjdfDas
  25. s7fTRZYMOTO0dfkGgBBx3+EIVkcV6H2NhtbCHZklpILT4QzqigtmYOECgYEA1Uni
  26. DtynAmUhMvZVrZO5hhgqlR3MW5DJbQoGWwOhSFknN9FpGSaANuQRGdav8rby6PtV
  27. 2RDQ0q/QehPqCx51/GQvh2Dm1zmKeURNItg+3tzwvwpSdah+HiNSzAAaG7TptPY4
  28. HG0vKk5orGXNFQKZiuWCrrDWUDLNpbsIKa5riQ8CgYEApCwyS6Gscv68vKeppzm3
  29. dIIoaOnsmMwahqqtIWUiwZ6iajo3EjG/AUKHtKshIBVUdnEwJYpgHd5yYeoEmtot
  30. u7OxpRXvD1R31noNErIBO5F8SB2NrrluZbM/PlFpTXP5RxSyBBdICgretz5hyhqf
  31. +BaCxUcDiSRNqcphS0zoUiECgYEAokSnm6770LKn42HOJVSyXPadzvzwsOkilbZ+
  32. x1enqKdLUwga8Wt9OEWjTQksq3fMrrwowBAvD1t7PKVR9kuib/a4wkJS3YOFemUg
  33. WlYy3tMwxedQfPtHmB4/q7yYIGQvOeHpJpdavtEQibiZolZsAmRCXC1ln3ZHRsNY
  34. nn14irkCgYEAzjQHLE08+p57GgSLnePFyTWgnDQNv0oebFDZZPZvB2f3WgP6cS1/
  35. 93gMV9OKYikHAqWxqhfRZeeg5RsNhOE3qGwruBWCn6ulNWUIlaJcvXC+R1AI9PQl
  36. AWoZDKDaPK/ke9jflyOV46vfFUzHiw/UbikXoCrT2YzZ+s+dalfkEcU=
  37. -----END RSA PRIVATE KEY-----
  38. macBook:ssl nobleyd$
  • 生成证书签名请求(csr)

 

  1. macBook:ssl nobleyd$ pwd
  2. /Applications/softwares/kafka_2.12-2.3.0/ssl
  3. macBook:ssl nobleyd$ openssl req -new -key ca/ca.key -out ca/ca.csr
  4. You are about to be asked to enter information that will be incorporated
  5. into your certificate request.
  6. What you are about to enter is what is called a Distinguished Name or a DN.
  7. There are quite a few fields but you can leave some blank
  8. For some fields there will be a default value,
  9. If you enter '.', the field will be left blank.
  10. -----
  11. Country Name (2 letter code) [AU]:cn
  12. State or Province Name (full name) [Some-State]:shanghai
  13. Locality Name (eg, city) []:shanghai
  14. Organization Name (eg, company) [Internet Widgits Pty Ltd]:
  15. Organizational Unit Name (eg, section) []:
  16. Common Name (e.g. server FQDN or YOUR name) []:
  17. Email Address []:
  18. Please enter the following 'extra' attributes
  19. to be sent with your certificate request
  20. A challenge password []:
  21. An optional company name []:
  22. macBook:ssl nobleyd$ cat ca/ca.csr
  23. -----BEGIN CERTIFICATE REQUEST-----
  24. MIICmzCCAYMCAQAwVjELMAkGA1UEBhMCY24xETAPBgNVBAgMCHNoYW5naGFpMREw
  25. DwYDVQQHDAhzaGFuZ2hhaTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkg
  26. THRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvqsYmyrQi26YvFYP
  27. pWeOqrqH4c3krPExmseHOGb5QcqkJJpDIgxSeJ44/1yo0/ROy0L2bRVq6i1Mn/24
  28. k4RUiFBZfSZ7DuUSAFvQzUDi796LoJNugiU0HaqgU8OcBs3znVxOneMbbO7BtRWh
  29. Bd9Ef1fgIy9/gfFeDYjDoS7+mzGJwxARk/zw3Hkn411RejadEhtN+aazHfgnTnm8
  30. BDLEDekFI8gCit/jCRjvFpSdDSVIGBPz8vfg4BHl7d2FE9AH4R5vK1DX0fkJh4z3
  31. 23ghf7/Wi5C+Vp9vXp+HnE/FDRt9++x/mpgwS726unVQop6Xi2D8zir5nIfEf4Pc
  32. 4OMWLwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAD+yK2YONGSk86AMgtTNPy/s
  33. cjSjrJF/IFwyyxZ0Z4YPzPCuEL+j39eEsaU2IQ7WCVNQ/25eHaZX+XMaMXyd1BqI
  34. gNkwko94ZeU3FNSfFr7ObLMMRdI2+kcIdqeWqXlkFEgowAM/ZYOrDr2GYgj+KgAr
  35. OvFVrbdncrkG4SBINDtVNm27YUz1aZ2c4ZXl3vr8EYixuUDVKuHc+SuKOuDHydf7
  36. EgS10jqJSFzuriD0oC0NB/XOX77oSPnxs/QWnJKI2QP5ehFDu62pF/hdQIG3rcbH
  37. KA1rvVdNlQ9pTh8m9oZBz+iyI/3DUjKCcdwN4Era69BHXIgSdQcqqRG1tY52PEY=
  38. -----END CERTIFICATE REQUEST-----
  39. macBook:ssl nobleyd$
  • 自签名
  1. macBook:ssl nobleyd$ pwd
  2. /Applications/softwares/kafka_2.12-2.3.0/ssl
  3. macBook:ssl nobleyd$
  4. macBook:ssl nobleyd$ openssl x509 -req -in ca/ca.csr -signkey ca/ca.key -out ca/ca.pem
  5. Signature ok
  6. subject=/C=cn/ST=shanghai/L=shanghai/O=Internet Widgits Pty Ltd
  7. Getting Private key
  8. macBook:ssl nobleyd$
  9. macBook:ssl nobleyd$ cat ca/ca.pem
  10. -----BEGIN CERTIFICATE-----
  11. MIIDKDCCAhACCQDIgoDWxjReuzANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJj
  12. bjERMA8GA1UECAwIc2hhbmdoYWkxETAPBgNVBAcMCHNoYW5naGFpMSEwHwYDVQQK
  13. DBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMTkxMTIzMTE0NjI3WhcNMTkx
  14. MjIzMTE0NjI3WjBWMQswCQYDVQQGEwJjbjERMA8GA1UECAwIc2hhbmdoYWkxETAP
  15. BgNVBAcMCHNoYW5naGFpMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBM
  16. dGQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC+qxibKtCLbpi8Vg+l
  17. Z46quofhzeSs8TGax4c4ZvlByqQkmkMiDFJ4njj/XKjT9E7LQvZtFWrqLUyf/biT
  18. hFSIUFl9JnsO5RIAW9DNQOLv3ougk26CJTQdqqBTw5wGzfOdXE6d4xts7sG1FaEF
  19. 30R/V+AjL3+B8V4NiMOhLv6bMYnDEBGT/PDceSfjXVF6Np0SG035prMd+CdOebwE
  20. MsQN6QUjyAKK3+MJGO8WlJ0NJUgYE/Py9+DgEeXt3YUT0AfhHm8rUNfR+QmHjPfb
  21. eCF/v9aLkL5Wn29en4ecT8UNG3377H+amDBLvbq6dVCinpeLYPzOKvmch8R/g9zg
  22. 4xYvAgMBAAEwDQYJKoZIhvcNAQELBQADggEBADqqtMoI3cxdQhoMXjs7T9gT00L6
  23. smxZb5+AMbSkF15PgxcOmFqsLVAD/aVOGiQSDWO0epdupMnhTObxsqHXzkPTWQgE
  24. UqmmmeOBQume8ipnliNOqK8qD/DQftdddx1O8g6rtHp/LXR01gDbuMsVLly8dZec
  25. a6QJCFxIj+iqZvjY8kYtRKzSWXECda9Ti1yW0yNWCsGwpbwvnyE3u2SSRGp5bwaK
  26. BMwSTo+KWMYn+BUoW5H7TmN2p54uCFIz8u/gQqkRxadHDVhATmNcdxtH+aQ03uml
  27. yno7kGkX4bJhD8R+SDd04j74mbbansbKOirNOmVbdUt9/UFlpB+HK/6JEmo=
  28. -----END CERTIFICATE-----
  29. macBook:ssl nobleyd$
  30. macBook:ssl nobleyd$ echo "00" > ca/ca.srl
  • 如上俩个步骤貌似还可以合并为: openssl req -new -x509 -key ca/ca.key -out ca.pem (暂不纠结区别)
  • 至此,ca/ca.key和ca/ca.pem全部生成ok。
  1. macBook:ssl nobleyd$ openssl pkcs12 -export -clcerts -in ca/ca.pem -inkey ca/ca.key -out ca/ca.p12
  2. Enter Export Password: capswd
  3. Verifying - Enter Export Password: capswd
  4. macBook:ssl nobleyd$

 

创建server的key和cer(类似)

 

创建client的key和cer(类似)

 

总结  | 注意仔细看下面脚本,和上边不是很一样,部分目录结构,以及参数选项在后续总结时候修改了下,如上部分无错误,只是不是最佳。

如上类似全部省略,下面是一个总结脚本,需要注意的是,有些和上边不同,主要是使用了x509 v3(即需要指定-extfile ./conf/openssl.cnf -extensions v3_req),其中openssl.cnf可以自行找找,安装了openssl后默认那个皆可。其次,生成csr时候需要输入的东西采用参数指定了,即不需要交互式输入。具体脚本如下。

HOST修改(Client认证Server一般会存在HostName Validation,因此测试需要改hosts实现下效果)

  • 这个步骤也是必须的,在后续最终使用的时候需要能够匹配hostname才能成功访问kafka。
    1. # 修改host文件设置
    2. 127.0.0.1 kafka.local

CA脚本

  1. # init
  2. rm -rf ca && mkdir -p ca
  3. echo '00' > ca/ca.srl
  4. # 1 生成私钥
  5. openssl genrsa -out ca/ca.key 2048
  6. # 2 生成证书签名请求文件
  7. openssl req -new -key ca/ca.key -subj /C=CN/ST=ShangHai/L=ShangHai/O=DefaultOrg/OU=DefaultDept/CN=CaName -out ca/ca.csr
  8. # 3 生成CA签名的证书(.pem .der)
  9. openssl x509 -extfile ./conf/openssl.cnf -extensions v3_req -signkey ca/ca.key -days 36500 -req -in ca/ca.csr -out ca/ca.pem
  10. openssl x509 -in ca/ca.pem -inform PEM -outform DER -out ca/ca.der
  11. # 4 导入密钥库(.p12 .jks)
  12. openssl pkcs12 -export -in ca/ca.pem -inkey ca/ca.key -name ca -out ca/ca.keystore.p12 -passout pass:pkcs12_ks_pswd
  13. keytool -importkeystore \
  14. -srcstoretype pkcs12 \
  15. -srckeystore ca/ca.keystore.p12 \
  16. -srcstorepass pkcs12_ks_pswd \
  17. -deststoretype jks \
  18. -destkeystore ca/ca.keystore.jks \
  19. -deststorepass jks_ks_pswd \
  20. -srcalias ca \
  21. -destalias ca \
  22. -srckeypass pkcs12_ks_pswd \
  23. -destkeypass jks_k_pswd
  24. # 5 查看证书文件
  25. openssl x509 -in ca/ca.pem -text -noout
  26. openssl x509 -in ca/ca.der -inform der -text -noout

Server脚本(默认使用了ServerName作为Server证书的CN字段,同时配合后续SSL配置ServerName作为超级用户,实现Broker之间的SSL连接)

  1. # init
  2. rm -rf server && mkdir -p server
  3. # 1 生成私钥
  4. openssl genrsa -out server/server.key 2048
  5. # 2 生成证书签名请求文件
  6. openssl req -new -key server/server.key -subj /C=CN/ST=ShangHai/L=ShangHai/O=DefaultOrg/OU=DefaultDept/CN=ServerName -out server/server.csr
  7. # 3 生成CA签名的证书(.pem .der)
  8. openssl x509 -extfile ./conf/openssl.cnf -extensions v3_req -CA ca/ca.pem -CAkey ca/ca.key -days 36500 -req -in server/server.csr -out server/server.pem
  9. openssl x509 -in server/server.pem -inform PEM -outform DER -out server/server.der
  10. # 4 导入密钥库(.p12 .jks)
  11. openssl pkcs12 -export -in server/server.pem -inkey server/server.key -name server -out server/server.keystore.p12 -passout pass:pkcs12_ks_pswd
  12. keytool -importkeystore \
  13. -srcstoretype pkcs12 \
  14. -srckeystore server/server.keystore.p12 \
  15. -srcstorepass pkcs12_ks_pswd \
  16. -deststoretype jks \
  17. -destkeystore server/server.keystore.jks \
  18. -deststorepass jks_ks_pswd \
  19. -srcalias server \
  20. -destalias server \
  21. -srckeypass pkcs12_ks_pswd \
  22. -destkeypass jks_k_pswd
  23. # 5 查看证书文件
  24. openssl x509 -in server/server.pem -text -noout
  25. openssl x509 -in server/server.der -inform der -text -noout
  26. # 6 信任 CA server
  27. keytool -import -noprompt -file ca/ca.pem -keystore server/server.truststore.jks -storepass jks_ts_pswd -alias ca
  28. keytool -importkeystore \
  29. -srcstoretype jks \
  30. -srckeystore server/server.truststore.jks \
  31. -srcstorepass jks_ts_pswd \
  32. -deststoretype pkcs12 \
  33. -destkeystore server/server.truststore.p12 \
  34. -deststorepass pkcs12_ts_pswd

Client脚本(可全文替换UserName为其他名称,对应证书中CN字段)

  1. # init
  2. rm -rf users/UserName && mkdir -p users/UserName
  3. # 1 生成私钥
  4. openssl genrsa -out users/UserName/UserName.key 2048
  5. # 2 生成证书签名请求文件
  6. openssl req -new -key users/UserName/UserName.key -subj /C=CN/ST=ShangHai/L=ShangHai/O=DefaultOrg/OU=DefaultDept/CN=UserName -out users/UserName/UserName.csr
  7. # 3 生成CA签名的证书(.pem .der)
  8. openssl x509 -extfile ./conf/openssl.cnf -extensions v3_req -CA ca/ca.pem -CAkey ca/ca.key -days 36500 -req -in users/UserName/UserName.csr -out users/UserName/UserName.pem
  9. openssl x509 -in users/UserName/UserName.pem -inform PEM -outform DER -out users/UserName/UserName.der
  10. # 4 导入密钥库(.p12 .jks)
  11. openssl pkcs12 -export -in users/UserName/UserName.pem -inkey users/UserName/UserName.key -name UserName -out users/UserName/UserName.keystore.p12 -passout pass:pkcs12_ks_pswd
  12. keytool -importkeystore \
  13. -srcstoretype pkcs12 \
  14. -srckeystore users/UserName/UserName.keystore.p12 \
  15. -srcstorepass pkcs12_ks_pswd \
  16. -deststoretype jks \
  17. -destkeystore users/UserName/UserName.keystore.jks \
  18. -deststorepass jks_ks_pswd \
  19. -srcalias UserName \
  20. -destalias UserName \
  21. -srckeypass pkcs12_ks_pswd \
  22. -destkeypass jks_k_pswd
  23. # 5 查看证书文件
  24. openssl x509 -in users/UserName/UserName.pem -text -noout
  25. openssl x509 -in users/UserName/UserName.der -inform der -text -noout
  26. # 6 信任 CA UserName
  27. keytool -import -noprompt -file ca/ca.pem -keystore users/UserName/UserName.truststore.jks -storepass jks_ts_pswd -alias ca
  28. keytool -importkeystore \
  29. -srcstoretype jks \
  30. -srckeystore users/UserName/UserName.truststore.jks \
  31. -srcstorepass jks_ts_pswd \
  32. -deststoretype pkcs12 \
  33. -destkeystore users/UserName/UserName.truststore.p12 \
  34. -deststorepass pkcs12_ts_pswd

Kafka 配置

  • 首先,明确下上边的配置和官网文档不是完全一致。官网在truststore中导入了ca的证书(和我们一致);在keystore中导入了自身证书以及ca的证书(我们仅导入ca的证书)。这个无影响。
  • 配置kafka自身部分
  1. # id 随机一个值即可,多个broker必须不同,我们测试仅一个broker。
  2. broker.id=0
  3. # 配置监听地址
  4. listeners=PLAINTEXT://:9092
  5. # kafka数据存放位置
  6. log.dirs=/Applications/softwares/kafka_2.12-2.3.0/kafka-logs
  • SSL配置片段1
  1. # If SSL is not enabled for inter-broker communication (see below for how to enable it), both PLAINTEXT and SSL ports will be necessary.
  2. # listeners=PLAINTEXT://host.name:port,SSL://host.name:port
  3. # 以上是官网说明,翻译下为:如果未开启broker之间的ssl,则必须同时提供PLAINTEXT监听地址。
  4. # listeners=PLAINTEXT://kafka.local:9092,SSL://kafka.local:9093
  5. # 我们采用纯SSL配置,否则端口泄漏的话,SSL形如虚设。
  6. listeners=SSL://kafka.local:9093
  7. # 可通过如下方式开启broker之间的ssl
  8. security.inter.broker.protocol=SSL
  • SSL配置片段2
  1. # 配置 SSL 。
  2. ssl.enabled.protocols=TLSv1.2,TLSv1.1,TLSv1
  3. ssl.secure.random.implementation=SHA1PRNG
  4. # 配置 keystore 。
  5. ssl.keystore.type=JKS
  6. ssl.keystore.location=/Applications/softwares/kafka_2.12-2.3.0/ssl/server/server.keystore.jks
  7. ssl.keystore.password=jks_ks_pswd
  8. ssl.key.password=jks_k_pswd
  9. # 配置 truststore 。
  10. ssl.truststore.type=JKS
  11. ssl.truststore.location=/Applications/softwares/kafka_2.12-2.3.0/ssl/server/server.truststore.jks
  12. ssl.truststore.password=jks_ts_pswd
  13. # 配置客户端验证
  14. # ssl.client.auth=none/requested/required
  15. ssl.client.auth=required
  16. # 配置客户端权限/ACL
  17. authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
  18. # 配置使用CN字段作为User的压缩名称
  19. ssl.principal.mapping.rules=RULE:^CN=([^,]*?),.*$/$1/
  20. # 配置超级用户(注意Broker之间存在SSL连接需要超级用户ServerName;管理需要超级用户KafkaAdmin)
  21. super.users=User:ServerName;User:KafkaAdmin
  • 启动单节点Kafka
  1. # 由于是测试,我们就不单独配置zk了,直接使用kafka默认的zk即可。
  2. # 修改zk配置(/Applications/softwares/kafka_2.12-2.3.0/config/zookeeper.properties)如下:
  3. dataDir=/Applications/softwares/kafka_2.12-2.3.0/zk_data
  4. # 启动zk
  5. ./bin/zookeeper-server-start.sh -daemon ./config/zookeeper.properties
  6. # 对应的停止zk命令如下
  7. ./bin/zookeeper-server-stop.sh
  8. # 启动kafka
  9. ./bin/kafka-server-start.sh -daemon ./config/server.properties
  10. # 对应的停止kafka命令如下
  11. ./bin/kafka-server-stop.sh
  • 快速测试
  • openssl s_client -debug -connect localhost:9093 -tls1
  • 消息生产和消费测试。
  • 替换client脚本中UserName为KafkaAdmin并生成KafkaAdmin的相关证书,然后配置如下文件。
  1. # 配置 config/kafka-admin-ssl.properties 。
  2. # 1 新增如下配置内容
  3. ssl.enabled.protocols=TLSv1.2,TLSv1.1,TLSv1
  4. security.protocol=SSL
  5. # 2 配置 truststore 。
  6. ssl.truststore.type=JKS
  7. ssl.truststore.location=/Applications/softwares/kafka_2.12-2.3.0/ssl/users/KafkaAdmin/KafkaAdmin.truststore.jks
  8. ssl.truststore.password=jks_ts_pswd
  9. # 3 配置 keystore 。
  10. ssl.keystore.type=JKS
  11. ssl.keystore.location=/Applications/softwares/kafka_2.12-2.3.0/ssl/users/KafkaAdmin/KafkaAdmin.keystore.jks
  12. ssl.keystore.password=jks_ks_pswd
  13. ssl.key.password=jks_k_pswd
  • 使用如下命令分别启动生成和消费者。注意分别使用俩个终端(非后台运行)。
    1. # 启动生成者
    2. ./bin/kafka-console-producer.sh --broker-list kafka.local:9093 --topic test --producer.config ./config/kafka-admin-ssl.properties
    1. # 启动消费者
    2. ./bin/kafka-console-consumer.sh --bootstrap-server kafka.local:9093 --topic test --consumer.config ./config/kafka-admin-ssl.properties
  • 注意,以上2命令只要不报错即是启动成功。直接在生产者进程标准输入中输入消息,回车即可发送。在消费者进程的终端则则会陆续看打印出收到的消息。

Authorization & ACL

  • 在如上的总结配置中实际已经完成了Authorization的全部配置,甚至包括部分ACL的配置,比如超级用户。下面我们会简单尝试几个具体的ACL管理命令的使用。
  • 新增Bob的证书配置
  1. # 配置 config/bob-ssl.properties 。
  2. # 1 新增如下配置内容
  3. ssl.enabled.protocols=TLSv1.2,TLSv1.1,TLSv1
  4. security.protocol=SSL
  5. # 2 配置 truststore 。
  6. ssl.truststore.type=JKS
  7. ssl.truststore.location=/Applications/softwares/kafka_2.12-2.3.0/ssl/users/Bob/Bob.truststore.jks
  8. ssl.truststore.password=jks_ts_pswd
  9. # 3 配置 keystore 。
  10. ssl.keystore.type=JKS
  11. ssl.keystore.location=/Applications/softwares/kafka_2.12-2.3.0/ssl/users/Bob/Bob.keystore.jks
  12. ssl.keystore.password=jks_ks_pswd
  13. ssl.key.password=jks_k_pswd
  • 使用如下命令分别启动生成和消费者。注意分别使用俩个终端(非后台运行)。
  1. # 启动生成者
  2. ./bin/kafka-console-producer.sh --broker-list kafka.local:9093 --topic test --producer.config ./config/bob-ssl.properties
  • 只要证书配置OK,启动就会成功。接着输入消息回车进行发送,会发现报错如下。
  1. macBook:kafka_2.12-2.3.0 nobleyd$ # 启动生成者
  2. macBook:kafka_2.12-2.3.0 nobleyd$ ./bin/kafka-console-producer.sh --broker-list kafka.local:9093 --topic test --producer.config ./config/bob-ssl.properties
  3. >my first msg
  4. [2019-11-25 18:56:29,966] WARN [Producer clientId=console-producer] Error while fetching metadata with correlation id 3 : {test=TOPIC_AUTHORIZATION_FAILED} (org.apache.kafka.clients.NetworkClient)
  5. [2019-11-25 18:56:29,967] ERROR [Producer clientId=console-producer] Topic authorization failed for topics [test] (org.apache.kafka.clients.Metadata)
  6. [2019-11-25 18:56:29,967] ERROR Error when sending message to topic test with key: null, value: 12 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
  7. org.apache.kafka.common.errors.TopicAuthorizationException: Not authorized to access topics: [test]
  8. >
  • 同时,可以查看kafka的日志如下。
  1. macBook:kafka_2.12-2.3.0 nobleyd$ tail -f logs/kafka-authorizer.log
  2. [2019-11-25 18:56:29,963] INFO Principal = User:Bob is Denied Operation = Describe from host = 127.0.0.1 on resource = Topic:LITERAL:test (kafka.authorizer.logger)
  • 同理,启动消费者进程,不过,消费者进程则会等待几秒后直接报错(不要问为什么,没啥好讲的)。
  1. macBook:kafka_2.12-2.3.0 nobleyd$ # 启动消费者
  2. macBook:kafka_2.12-2.3.0 nobleyd$ ./bin/kafka-console-consumer.sh --bootstrap-server kafka.local:9093 --topic test --consumer.config ./config/bob-ssl.properties
  3. [2019-11-25 18:58:57,704] WARN [Consumer clientId=consumer-1, groupId=console-consumer-70366] Error while fetching metadata with correlation id 2 : {test=TOPIC_AUTHORIZATION_FAILED} (org.apache.kafka.clients.NetworkClient)
  4. [2019-11-25 18:58:57,708] ERROR [Consumer clientId=consumer-1, groupId=console-consumer-70366] Topic authorization failed for topics [test] (org.apache.kafka.clients.Metadata)
  5. [2019-11-25 18:58:57,710] ERROR Error processing message, terminating consumer process: (kafka.tools.ConsoleConsumer$)
  6. org.apache.kafka.common.errors.TopicAuthorizationException: Not authorized to access topics: [test]
  7. Processed a total of 0 messages
  8. macBook:kafka_2.12-2.3.0 nobleyd$
  • 接下来,我们为Bob授权。
  1. bin/kafka-acls.sh --authorizer-properties zookeeper.connect=kafka.local:2181 \
  2. --add \
  3. --allow-principal User:Bob \
  4. --allow-host * \
  5. --operation ALL \
  6. --topic test
  • 授权之后生产者写入就没问题了。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/983193
推荐阅读
相关标签
  

闽ICP备14008679号