APISIX 3.12启用kafka-logger插件SASL_SSL连接证书错误排查
问题描述
使用APISIX 3.12版本,配置kafka-logger插件通过SASL_SSL协议向Kafka发送日志时,触发路由后出现错误:
SSL_read() failed - routines::ssl/tls:ssl bad certificates alert number 42.
当前路由配置如下:
curl http://127.0.0.1:9180/apisix/admin/routes/5 -H "X-API-KEY: $admin_key" -X PUT -d ' { "plugins": { "kafka-logger": { "brokers" : [ { "host" :"127.0.0.1", "port" : 9092, "sasl_config": { "enable": true, "user":"XXX", "password":"XXX", "mechanism":"PLAIN" }, "ssl": true, "ssl_verify":true } ], "kafka_topic" : "test2", "key" : "key1", "batch_max_size": 1, "name": "kafka logger" } }, "upstream": { "nodes": { "127.0.0.1:1980": 1 }, "type": "roundrobin" }, "uri": "/hello" }'
已知相同证书可正常用于Python Kafka生产者/消费者,但不清楚在APISIX中何处配置客户端证书、私钥及可信CA证书。
解决方案
1. 插件级配置(推荐,针对特定路由的kafka-logger)
在kafka-logger的broker配置中直接添加证书相关参数,支持通过文件路径或PEM字符串配置:
ssl_ca_cert:Kafka服务端证书的CA根证书(用于验证Kafka的SSL证书)ssl_client_cert:客户端证书(若Kafka开启双向认证)ssl_client_key:客户端私钥(若Kafka开启双向认证)
修改后的路由配置示例:
curl http://127.0.0.1:9180/apisix/admin/routes/5 -H "X-API-KEY: $admin_key" -X PUT -d ' { "plugins": { "kafka-logger": { "brokers" : [ { "host" :"127.0.0.1", "port" : 9092, "sasl_config": { "enable": true, "user":"XXX", "password":"XXX", "mechanism":"PLAIN" }, "ssl": true, "ssl_verify":true, "ssl_ca_cert": "file:///usr/local/apisix/certs/kafka-ca.pem", "ssl_client_cert": "file:///usr/local/apisix/certs/client-cert.pem", "ssl_client_key": "file:///usr/local/apisix/certs/client-key.pem" } ], "kafka_topic" : "test2", "key" : "key1", "batch_max_size": 1, "name": "kafka logger" } }, "upstream": { "nodes": { "127.0.0.1:1980": 1 }, "type": "roundrobin" }, "uri": "/hello" }'
注意:若使用容器部署APISIX,需将证书文件挂载到容器内对应路径;若直接使用PEM字符串,需将证书内容转义为单行字符串(替换换行符为
\n)。
2. 全局配置(影响所有Lua SSL请求)
若需让所有APISIX的Lua模块(包括kafka-logger)使用统一的SSL证书,可修改APISIX的config.yaml文件,添加Nginx的SSL相关指令:
nginx_config: http: lua_ssl_trusted_certificate: "/usr/local/apisix/certs/kafka-ca.pem" lua_ssl_certificate: "/usr/local/apisix/certs/client-cert.pem" lua_ssl_certificate_key: "/usr/local/apisix/certs/client-key.pem" lua_ssl_verify_depth: 5
修改后重启APISIX生效。
关键注意事项
- 若
ssl_verify设为true,必须配置ssl_ca_cert以信任Kafka的SSL证书,否则会触发证书验证失败错误; - 若Kafka仅开启单向认证(无需客户端证书),可省略
ssl_client_cert和ssl_client_key参数; - 确保证书文件权限正确,APISIX进程需拥有读取证书文件的权限。
内容的提问来源于stack exchange,提问作者Mayur Maheshwari
相关产品推荐
相关产品推荐

