去哪儿数据库自动化平台实践——通讯协议

去哪儿数据库自动化平台实践——通讯协议

作者介绍:

钱芳园,专注数据库和数据库自动化领域的工程师,擅长 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 是编码在二进制代码中,无法访问。

认证进程

  1. agent 发动时会搜集自身和环境信息,并向 server 注册。
  2. server 收到注册恳求之后,会针对本次恳求的 agent 生成装备信息。
  • 随机生成一个securityKey(每个agent每次注册都会生成新的securityKey)。
  • 运用 securityKey 加密 agent 的原始装备信息。
  • 运用 key 加密 securityKey 。
  1. server 将装备信息(包括加密之后的 securityKey)发送给 agent。
  2. agent 收到装备信息后,运用对应的 key 解析 securityKey,然后运用 securityKey 解密出原始的装备信息。

恳求进程

  1. server 生成 token。
  • 生成包括 server 身份信息在内的服务信息。
  • 运用 agent 对应的 securityKey 加密服务信息。
  • 运用加密之后的服务信息生成 token 。
  1. server 向 agent 下发指令恳求,并附加 token。

  2. agent 收到恳求之后,进行查看。

  • 解析 token 并获取服务信息。
  • 运用 securityKey 解密服务信息,并获取恳求的身份信息。
  • 查看身份信息是否正确,假如查看过错则直接拒绝恳求。
  1. agent 履行指令并回来成果。

阐明

  1. agent 和 server 共有的 key
  • key 只用于加密和解密 sercurityKey,不用于其他用处,即便走漏也不会影响认证。
  • agent 和 server 是二进制编译布置,key 不存在与装备文件中,key 不会在网络中以任何方式传输。
  • key不参与数据加密进程,即便 server 向 agent 恳求时,key 不相同认证也会通过。
  • 后边假如需求考虑替换掉 key,只需求保证 agent 注册的时分 server 与 agent 的 key 相同就可以注册成功。
  1. securityKey
  • 每个 agent 专属一个 securityKey 。
  • 每个 agent 发动注册均会随机生成一个 securityKey ,假如存在旧的 securityKey 则会被掩盖。
  • securityKey 是用来加密灵敏信息,防止灵敏信息。
  • securityKey 仅在注册进程中传输一次,而且只存在于 agent 的内存中,不会以任何方式存在于文件中。
  1. token

token 中包括加密之后的server身份信息,agent 认证时会做如下查看:

  • agent 查看 token 身份信息是否符合要求,假如身份信息不符合要求则认证不予通过。
  • agent 会将身份信息与恳求来源进行比较,假如不同则被以为 token 为非法。