作者介绍:
钱芳园,专注数据库和数据库自动化领域的工程师,擅长 MySQL、Redis 运维以及基于 go 语言的数据库自动化开发。
一、背景
新一代去哪儿数据库自动化渠道规划整体架构如下:
架构阐明:
【1】渠道是分层构建,不同层级的模块功用专注不同的功用,上图只是列出部分模块。
【2】Server 是整个架构的初始化模块,也是整个渠道的管控节点。
【3】Meta 是整个架构的元数据中心。
【4】每个模块都是独立的存在,同一层级的模块之间可以彼此调用,低层级的模块不能自动调用高层级的模块。依据自动化渠道的规划,渠道需求布置一套 Agent 和各种 Plugin 在方针服务器上,Agent 和 Plugin 具有履行各种指令、使命。可是 Agent/Plugin 需求与 Server 之间传输一些灵敏信息(暗码、秘钥等),需求规划一套交互协议,防止灵敏信息走漏,保证数据传输的安全性。
二、方针
规划一套Agent/Plugin和Server之间的通信协议,需求完结以下方针:
- 满意功用上的需求,可以接受恳求,履行指令和使命。
- 保证灵敏信息传输的安全性。
- 对部分影响较大的恳求进行认证。
- 尽可能不依赖外部服务。
三、分析
通讯方法
现在主流两个服务之间的通讯方法有:http/https、tcp、udp、rcp。
通讯方法 | 协议层 | 长处 | 缺点 |
---|---|---|---|
tcp/udp | 传输层 | 完全可定制化的通讯协议,可以具有较高的安全性。 | 需求从底层完结一套复杂的通讯协议,开发本钱十分高。 |
rpc | 应用层 | 成熟的通讯协议,现有结构可以完好支持,可以在此基础上完结二次开发,而且功能较高。 | 需求指定的客户端才干通讯,调试不太便利,开发本钱稍高。 |
http/https | 应用层 | 成熟的通讯协议,现有结构可以完好支持,可以在此基础上完结二次开发,而且客户端较多,调试十分便利。 | 比较rcp,功能较低,开发本钱较低。 |
现在 Agent / Plugin 和 Server 之间的通讯的功能要求不高,最主要的是满意功用上的需求和防止灵敏信息走漏,便利开发、调试。故咱们选用开发本钱稍低的 http 协议。
需求加密的接口
Agent/Plugin和Server 之间通讯时,90% 的场景是获取一些非灵敏性信息,例如:服务器信息、硬件信息等。假如这些非灵敏的信息进行加密会大大浪费资源,增加双方的担负。故咱们对含有非灵敏信息的接口不选用加密的通讯方法,仅对含有灵敏信息的接口进行加密传输。
加密协议
加密方法大致分为对称加密和非对称加密。两者主要的区别在于加密和解密的秘钥是否是同一个。
– 对称加密
对称加密用的秘钥既可以用来加密明文数据,也可以用来解密密文数据,故被称之为对称加密。一般情况下对称加密的加密算法是揭露的,一旦秘钥走漏则密文就会很容破解,所以对称加密的关键在于秘钥的安全管理。
加密进程如下:
密文=Func(明文,秘钥)
其间Func为加密算法。解密进程如下:
明文=Func(密文,秘钥)
其间 Func 为加密算法。
对称加密算法主要有 AES、DES、3DES 等,由于 DES 和 3DES 在安全性方面不如 AES,故现在不再引荐运用 DES 和 3DES 。
名称 | 密钥长度 | 运算速度 | 安全性 | 资源耗费 | 是否引荐 |
---|---|---|---|---|---|
DES | 56位 | 较快 | 低 | 中 | 不引荐 |
3DES | 112位或168位 | 慢 | 中 | 高 | 不引荐 |
AES | 128、192、256位 | 快 | 高 | 低 | 引荐 |
– 非对称加密
非对称加密有一对秘钥,可以用其间任何一个秘钥来加密,用另一个秘钥来解密。一般情况下会把其间的一把秘钥揭露,可以运用这个秘钥对任何数据进行加密,只需另一把秘钥不走漏就可以保证数据安全。为了区别这两个秘钥,可以揭露的秘钥称为公钥,不能揭露的秘钥称为私钥。
加密进程如下:
密文=Func(明文,公钥)
其间Func为加密算法。解密进程如下:
明文=Func(密文,私钥)
其间Func为加密算法。
常见的非对称加密算法有RSA、DSA等。
名称 | 成熟度 | 安全性(取决于密钥长度) | 运算速度 | 资源耗费 |
---|---|---|---|---|
RSA | 高 | 高 | 慢 | 高 |
DSA | 高 | 高 | 慢 | 只能用于数字签名 |
ECC | 低 | 高 | 快 | 低(计算量小,存储空间占用小,带宽要求低) |
RSA 加密算法是现在最有影响力的公钥加密算法,而且被遍及以为是现在最优秀的公钥计划 之一。RSA 是第一个能一起用于加密和数字签名的算法,它可以抵抗到现在为止已知的一切暗码进犯,已被 ISO 引荐为公钥数据加密规范。对称加密和非对称加密算法比较:
加密方法 | 优势 | 下风 |
---|---|---|
对称加密 | 速度快,资源耗费低 | 安全性不如非对称加密 |
非对称加密 | 安全性高 | 加解密速度低,资源耗费高 |
基于加密和解密速度上的考虑,现在Agent/Plugin和Server之间选用对称加密算法。
流程规划
– 流程图
图示以Agent和 Server 认证进程为例。Agent 和 Server 之间都含有一个固定的 key,这个 key 是编码在二进制代码中,无法访问。
– 认证进程
- agent 发动时会搜集自身和环境信息,并向 server 注册。
- server 收到注册恳求之后,会针对本次恳求的 agent 生成装备信息。
- 随机生成一个securityKey(每个agent每次注册都会生成新的securityKey)。
- 运用 securityKey 加密 agent 的原始装备信息。
- 运用 key 加密 securityKey 。
- server 将装备信息(包括加密之后的 securityKey)发送给 agent。
- agent 收到装备信息后,运用对应的 key 解析 securityKey,然后运用 securityKey 解密出原始的装备信息。
– 恳求进程
- server 生成 token。
- 生成包括 server 身份信息在内的服务信息。
- 运用 agent 对应的 securityKey 加密服务信息。
- 运用加密之后的服务信息生成 token 。
-
server 向 agent 下发指令恳求,并附加 token。
-
agent 收到恳求之后,进行查看。
- 解析 token 并获取服务信息。
- 运用 securityKey 解密服务信息,并获取恳求的身份信息。
- 查看身份信息是否正确,假如查看过错则直接拒绝恳求。
- agent 履行指令并回来成果。
– 阐明
- agent 和 server 共有的 key
- key 只用于加密和解密 sercurityKey,不用于其他用处,即便走漏也不会影响认证。
- agent 和 server 是二进制编译布置,key 不存在与装备文件中,key 不会在网络中以任何方式传输。
- key不参与数据加密进程,即便 server 向 agent 恳求时,key 不相同认证也会通过。
- 后边假如需求考虑替换掉 key,只需求保证 agent 注册的时分 server 与 agent 的 key 相同就可以注册成功。
- securityKey
- 每个 agent 专属一个 securityKey 。
- 每个 agent 发动注册均会随机生成一个 securityKey ,假如存在旧的 securityKey 则会被掩盖。
- securityKey 是用来加密灵敏信息,防止灵敏信息。
- securityKey 仅在注册进程中传输一次,而且只存在于 agent 的内存中,不会以任何方式存在于文件中。
- token
token 中包括加密之后的server身份信息,agent 认证时会做如下查看:
- agent 查看 token 身份信息是否符合要求,假如身份信息不符合要求则认证不予通过。
- agent 会将身份信息与恳求来源进行比较,假如不同则被以为 token 为非法。