-
Notifications
You must be signed in to change notification settings - Fork 277
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
failed to do SCRAM-SHA-512 auth #153
Comments
@Jon-Gaara 可以帮忙看下不?多谢 |
有没有可能是 配置链接方式出错? 我已经做过很多种不同配置的尝试,当前配置如下。
因为不确定 sasl_config 是放在broker_list 还是client_config,所以都配置了sasl_config。 python 3.10下测试可链接的配置如下
配置上少一个 security_protocol |
@Jon-Gaara 感谢你的回复,请问这个认证,在log_by_lua* 阶段会不会有问题? 因为是别人的kafka集群,我无法拿到配置,但是我通过python的api测试是可以正常访问的。 |
你在log_by_lua* 阶段是通过ngx.timer.at去调用kafka发送消息的么?如果不是的话,可以试试,看下能不能正常运行 |
测试了通过ngx.timer.at 调用,还是无法连接kafka kafka集群认证的配置是 |
你如果方便的也可以debug看下,因为我这个就是参考的kafka-python写的,如果是scramsha.lua - _M.sock_send_receive() 中 local len, err = sock:receive(4) len为空的话,那就是调用send_first_message方法发第一条信息就失败了,这种情况说明发送的消息有问题,kafka主动关闭连接,你可以和kafka-python对比下发的消息有什么不一样的地方? |
抓包比较吗?请问有没有什么比较快捷的对比方法? |
我本地模拟看看,能不能出现你说的情况. 你的scala和kafka的版本是多少? |
大佬,看下是不是这个原因。 kafka-python此参数的精简后 逻辑如下 (conn.py 400 行左右) if self.config['security_protocol'] in ('SSL', 'SASL_SSL'):
self.state = ConnectionStates.HANDSHAKE
elif self.config['security_protocol'] == 'SASL_PLAINTEXT':
self.state = ConnectionStates.AUTHENTICATING
else:
self.state = ConnectionStates.CONNECTED
......
if self.state is ConnectionStates.HANDSHAKE:
if self._try_handshake():
log.debug('%s: completed SSL handshake.', self)
if self.config['security_protocol'] == 'SASL_SSL':
log.debug('%s: initiating SASL authentication', self)
self.state = ConnectionStates.AUTHENTICATING
else:
log.info('%s: Connection complete.', self)
self.state = ConnectionStates.CONNECTED
self._reset_reconnect_backoff()
self.config['state_change_callback'](self.node_id, self._sock, self)
if self.state is ConnectionStates.AUTHENTICATING:
assert self.config['security_protocol'] in ('SASL_PLAINTEXT', 'SASL_SSL')
if self._try_authenticate():
security_protocol 参数 security_protocol 不配置时,通过抓包和 pdb调试,都没有发送 first_message() 在lua-resty-kafka 这个库中没有此参数,默认逻辑就 ssl 握手 远程返回closed,连接kafka失败。 |
kafka版本 2.1.2-1.0.2 麻烦帮忙看看 |
|
|
是的,整个去掉sasl_config,不配置用户名和密码 |
local broker_list = {
还是链接失败,报错 |
@doujiang24 是否需要对kafka的低版本进行支持? |
生产环境使用的统一集群,我很被动😭。 请教: |
fork项目,然后改test.yaml,提交之后,github就会跑Action,执行测试 |
我这边测试用kafka 2.12-1.0.2,跑test,认证也是可以过的,不知道你本地为什么不行?lua-resty-kafka只有0.22.0版本,0.22.2是哪个版本? |
lua-resty-kafka-0.22 |
我的意见是:能支持最好,如果有想支持的,欢迎 PR,我还是乐意来 review 代码的 |
@zhanghangorg 你这个问题解决了吗?我也遇到了同样的问题 |
环境:
openresty -V
nginx version: openresty/1.21.4.1
built by gcc 12.2.1 20220924 (Alpine 12.2.1_git20220924-r4)
built with OpenSSL 1.1.1t 7 Feb 2023
lua-resty-kafka 0.22.2
依赖
lua-resty-openssl 0.8.22
lua-resty-jit-uuid-0.0.7
问题描述:
连接 SCRAM-SHA-512 认证的kafka集群,无法通过认证
错误信息:
[info] 63#63: 5040 [lua] client.lua:185: _fetch_metadata(): broker fetch metadata failed, err:failed to do SCRAM-SHA-512 auth with 1...:9092: closed, host: 1..**, port: 9092, context: ngx.timer, client: 1..., server: 0.0.0.0:80
返回的err信息,仅仅是一个 closed。
通过代码跟踪,发现在
scramsha.lua - _M.sock_send_receive() 中 local len, err = sock:receive(4) len为空,进入错误处理
lua-resty-kafka/lib/resty/kafka/scramsha.lua
Line 198 in 3fbed91
通过telent测试,网络是通的。
The text was updated successfully, but these errors were encountered: