You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 04:04:51