apolloconfig / apolloconfig/apollo

敏感字段加密存储方案

Abierto
#3,187 9 comentarios 0 reacciones 0 asignados Ver en GitHub
discussion
Lenguaje dominante
Java
Estrellas
29.8k
Forks
10.2k
Merge medio
4 d 7 h
PR fusionados (30 d)
4

Descripción

**概要**
目前数据库密码等敏感信息在配置文件或apollo中使用明文保存,存在一定的安全隐患。现计划依托apollo配置中心,提供一套配置秘钥文件加密和解密方,实现密码以密文存在,仅在程序运行时能够解密到明文。

**方案**

1、在创建APPID时,动态生产一对RSA秘钥,存储在数据库中。
2、“添加”,“修改”配置页面增加“加密”选项,如果选择“加密”复选框后,利用“步骤1”中生产appid公钥加密,参考 jasypt 项目以 ENC(xxxxxxxxxxxxx) 包装需要加密后的内容,存储到数据库中。
3、客户端基于“前缀 ENC(” 和 “后缀 )” 来判断是否需要进行额外的解密动作,对于需要解密的内容,每次生成一对RSA“客户端秘钥”。以 “客户端公钥”、“待解密密文“,“APPID” ,"Rnd随机数"为参数构造请求调用Config Server接口进行解密操作。
4、Config Server,基于APPID对应的RSA 私钥(第1步创建保存到数据库中的),对“待解密密文”进行解密,并将解密后的明文,使用“客户端公钥”进行加密后返回客户端。同时结合明文和"Rnd随机数"计算一个MD5值
5、客户端使用RSA私钥(第3步生成)解密后,并校验MD5值,校验通过后供应用程序使用, 否则在客户端层面直接报错不允许程序启动

**优点**

- 复用apollo平台,修改量较小
- 在脱离允许环境后,无法对密码进行反解

**缺点**

- apollo平台变成了应用的一个强依赖平台,当apollo平台整体不可用的情况下,应用程序重启时会应为密文无法解密而启动失败。
- 不法分子在运行环境内部,可以通过对client逻辑分析后,构造模拟报文,调用config server解密密文信息。

所作的修改: https://github.com/ctripcorp/apollo/compare/v1.6.2...tangxy:v1.6.2-addon?expand=1
目前功能已实现,不知这样的功能能否加入到apollo大家庭中。

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.