其他
去哪儿数据库自动化平台实践——通讯协议
作者介绍:
专注数据库和数据库自动化领域的工程师,擅长 MySQL、Redis 运维以及基于 go 语言的数据库自动化开发。
二、目标
满足功能上的需求,可以接受请求,执行命令和任务。
确保敏感信息传输的安全性。
对部分影响较大的请求进行认证。
尽可能不依赖外部服务。
三、分析
通讯方式
通讯方式 | 协议层 | 优点 | 缺点 |
tcp/udp | 传输层 | 完全可定制化的通讯协议,可以具备较高的安全性。 | 需要从底层实现一套复杂的通讯协议,开发成本非常高。 |
rpc | 应用层 | 成熟的通讯协议,现有框架可以完整支持,可以在此基础上完成二次开发,并且性能较高。 | 需要指定的客户端才能通讯,调试不太方便,开发成本稍高。 |
http/https | 应用层 | 成熟的通讯协议,现有框架可以完整支持,可以在此基础上完成二次开发,并且客户端较多,调试非常方便。 | 相比rcp,性能较低,开发成本较低。 |
对称加密
加密过程如下:
密文=Func(明文,秘钥)
明文=Func(密文,秘钥)
名称 | 密钥长度 | 运算速度 | 安全性 | 资源消耗 | 是否推荐 |
DES | 56位 | 较快 | 低 | 中 | 不推荐 |
3DES | 112位或168位 | 慢 | 中 | 高 | 不推荐 |
AES | 128、192、256位 | 快 | 高 | 低 | 推荐 |
非对称加密
密文=Func(明文,公钥)
明文=Func(密文,私钥)
名称 | 成熟度 | 安全性(取决于密钥长度) | 运算速度 | 资源消耗 |
RSA | 高 | 高 | 慢 | 高 |
DSA | 高 | 高 | 慢 | 只能用于数字签名 |
ECC | 低 | 高 | 快 | 低(计算量小,存储空间占用小,带宽要求低) |
加密方式 | 优势 | 劣势 |
对称加密 | 速度快,资源消耗低 | 安全性不如非对称加密 |
非对称加密 | 安全性高 | 加解密速度低,资源消耗高 |
流程图
认证过程
随机生成一个securityKey(每个agent每次注册都会生成新的securityKey)。 使用 securityKey 加密 agent 的原始配置信息。 使用 key 加密 securityKey 。
请求过程
生成包含 server 身份信息在内的服务信息。 使用 agent 对应的 securityKey 加密服务信息。 使用加密之后的服务信息生成 token 。
解析 token 并获取服务信息。
使用 securityKey 解密服务信息,并获取请求的身份信息。
检查身份信息是否正确,如果检查错误则直接拒绝请求。
说明
key 只用于加密和解密 sercurityKey,不用于其他用途,即使泄露也不会影响认证。
agent 和 server 是二进制编译部署,key 不存在与配置文件中,key 不会在网络中以任何形式传输。
key不参与数据加密过程,即使 server 向 agent 请求时,key 不相同认证也会通过。
后面如果需要考虑替换掉 key,只需要保证 agent 注册的时候 server 与 agent 的 key 相同就可以注册成功。
每个 agent 专属一个 securityKey 。 每个 agent 启动注册均会随机生成一个 securityKey ,如果存在旧的 securityKey 则会被覆盖。 securityKey 是用来加密敏感信息,防止敏感信息。 securityKey 仅在注册过程中传输一次,并且只存在于 agent 的内存中,不会以任何形式存在于文件中。
token 中包含加密之后的server身份信息,agent 认证时会做如下检查:
agent 检查 token 身份信息是否符合要求,如果身份信息不符合要求则认证不予通过。
agent 会将身份信息与请求来源进行比较,如果不同则被认为 token 为非法