Skip to content
This repository has been archived by the owner on Feb 9, 2023. It is now read-only.

关于WritePublicKeyAuthPacket #2

Open
lulufeiacount opened this issue May 20, 2021 · 3 comments
Open

关于WritePublicKeyAuthPacket #2

lulufeiacount opened this issue May 20, 2021 · 3 comments

Comments

@lulufeiacount
Copy link

老哥,我发现你代码中关于MySQL校验包 WritePublicKeyAuthPacket有问题, 刚刚验证通过了。
sha1v := sha1.New()
enc, _ := rsa.EncryptOAEP(sha1v, rand.Reader, pub.(*rsa.PublicKey), plain, nil)
data = make([]byte, 4+len(enc))
copy(data[4:], enc)
return dc.writePacket(data)

通过对比,不出意外的话这个方法应该是借用的go-sql-driver中的相关代码,其中data = make([]byte, 4+len(enc); copy(data[4:], enc)相对于gaea来说是多余的,gaea在执行writePacket方法时,会在请求体data前面加上添加四个字节作为header。 此步骤有冗余,导致公共秘钥校验失败。

@endink
Copy link
Owner

endink commented May 20, 2021

@lulufeiacount 由于我们这边没有用到 sha 校验,用的 native passwork,master 只是应对临时急用的需要修改并满足了我们自己mysql 8 的可用性,没有全面的测试覆盖,如果需要完善的实现你可以查看 refactor 分支,这个分支是正在重构重写的项目,已经完成了 mysql 协议部分的代码,而且配有完整的单元测试,是在 vitess 实现基础上参考 mysql 8 协议的完整实现~

@endink
Copy link
Owner

endink commented May 20, 2021

小米的 route 部分代码非常乱,已经放弃在他的基础上修改了~~ 重写因为只有我一个人,也不是全职做这个,所以进度缓慢~~

BTW: 你可以抽取 mysql 目录下的代码来实现一个自定义的兼容 mysql 的服务器,这些代码已经完整兼容了 mysql 8 授权协议(NATIVE, SHA256) , main 分支已经不再维护,如果你有兴趣,可以提交 PR 我来合并

@lulufeiacount
Copy link
Author

好的,我已经fork了一份。有时间的话我研究研究哈

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants