加密配置

最近更新时间: 2024-10-17 17:10:00

配置加密功能提供了对配置值加密的存储全套解决方案。

通过增强源生 SDK 能力,同时兼容本地文件配置和分布式配置的配置值加密。

准备工作

  1. 确保使用最新的 TSF SDK。

  2. 按照 [分布式配置开发文档] 添加了代码注释。

  3. 下载 SDK 加密工具

  4. 准备需要加密的相关信息(此处为举例,用户使用时请调整)

  • 密码明文(plaintext):TX_PwDemO_1hblsqT

  • 密钥(encpty password):encryptPassword

SDK 加密工具

  1. 找到加密工具包(spring-cloud-tsf-encrypt-1.1.1-RELEASE.jar)。

  2. 执行以下命令对配置明文密码进行加密(需升级到 Java8 161或以上版本,或使用 补丁 解决问题):

    D:\repo\com\tencent\tsf\spring-cloud-tsf-encrypt\1.1.1-RELEASE>java -jar spring-cloud-tsf-encrypt-1.1.1-RELEASE.jar encrypt TX_PwDemO_1hblsqT encryptPassword

输出结果:

    [encrypt] result:
    3M7wGw2XtFc5Y+rxOgNBLrm2spUtgodjIxa+7F3XcAo=

用例:

    D:\repo\com\tencent\tsf\spring-cloud-tsf-encrypt\1.1.1-RELEASE>java -jar spring-cloud-tsf-encrypt-1.1.1-RELEASE.jar
    At least 3 arguments required. Usage: [operation] [content] [password]
    [operation]: Choose one from [encrypt | decrypt].
    [content]: Plaintext when encrypt or ciphertext when decrypt.
    [password]: Encrypt or decrypt password.
  1. 执行以下命令对密文密码进行解密:
    D:\repo\com\tencent\tsf\spring-cloud-tsf-encrypt\1.1.1-RELEASE>java -jar spring-cloud-tsf-encrypt-1.1.1-RELEASE.jar decrypt 3M7wGw2XtFc5Y+rxOgNBLrm2spUtgodjIxa+7F3XcAo= encryptPassword

输出结果:

    [decrypt] result:
    TX_PwDemO_1hblsqT

用例:

 D:\repo\com\tencent\tsf\spring-cloud-tsf-encrypt\1.1.1-RELEASE>java -jar spring-cloud-tsf-encrypt-1.1.1-RELEASE.jar
 At least 3 arguments required. Usage: [operation] [content] [password]
 [operation]: Choose one from [encrypt | decrypt].
 [content]: Plaintext when encrypt or ciphertext when decrypt.
 [password]: Encrypt or decrypt password.

配置项填写方式

注意:

本地配置和线上配置同时支持(需要符合 spring-config 源生规范)。

本地 YAML

配置在 application.yml或application.yml

tsf:
  inventory:
    password:
      encrypt1: ENC(3M7wGw2XtFc5Y+rxOgNBLrm2spUtgodjIxa+7F3XcAo=)

配置中心 YAML

配置在全局配置/应用配置,并发布

tsf:
  inventory:
    password:
      encrypt2: ENC(3M7wGw2XtFc5Y+rxOgNBLrm2spUtgodjIxa+7F3XcAo=)

本地 Properties

配置在application.properties或application.properties

tsf.inventory.password.encrypt3=ENC(3M7wGw2XtFc5Y+rxOgNBLrm2spUtgodjIxa+7F3XcAo=)

业务应用使用

环境变量(推荐)

在系统环境变量中配置密钥(password):此时密钥泄露的风险最小。

tsf_config_encrypt_password=encryptPassword

JVM 参数(不推荐)

也可以在JVM参数中配置密钥(password):

-Dtsf_config_encrypt_password=encryptPassword

启动参数(不推荐)

也可以在应用启动参数中配置密钥(password):

--tsf_config_encrypt_password=encryptPassword

Java 测试代码

Java代 码按照常规配置使用。

配置类:

@ConfigurationProperties("tsf.inventory.password")
@Component
@RefreshScope
public class PasswordConfiguration {

    private String encrypt1;
    private String encrypt2;
    private String encrypt3;

    @Value("${tsf.inventory.password.encrypt1}")
    private String encrypt4;
    @Value("${tsf.inventory.password.encrypt2}")
    private String encrypt5;
    @Value("${tsf.inventory.password.encrypt3}")
    private String encrypt6;

    // getters and setters
}

测试类:


@RestController
public class TestController {

    @Autowired
    private PasswordConfiguration pwConfig;
    /**
     * 显示明文密码
     * 
     * @return 明文密码
     */
    @RequestMapping("/inventory/password")
    public String showPassword() {
        String content = "TX_PwDemO_1hblsqT";
        StringBuffer sb = new StringBuffer("Test Config Encrypt/Decrypt:\n");
        // 内存读取
        sb.append(String.format("[%s]\t内存读取*.yml文件配置: %s\n",
                content.equals(
                        SpringCloudTsfApplication.ctx.getEnvironment().getProperty("tsf.inventory.password.encrypt1")),
                SpringCloudTsfApplication.ctx.getEnvironment().getProperty("tsf.inventory.password.encrypt1")));
        sb.append(String.format("[%s]\t内存读取consul配置: %s\n",
                content.equals(
                        SpringCloudTsfApplication.ctx.getEnvironment().getProperty("tsf.inventory.password.encrypt2")),
                SpringCloudTsfApplication.ctx.getEnvironment().getProperty("tsf.inventory.password.encrypt2")));
        sb.append(String.format("[%s]\t内存读取*.properties文件配置: %s\n",
                content.equals(
                        SpringCloudTsfApplication.ctx.getEnvironment().getProperty("tsf.inventory.password.encrypt3")),
                SpringCloudTsfApplication.ctx.getEnvironment().getProperty("tsf.inventory.password.encrypt3")));
        // Bean读取
        sb.append(String.format("[%s]\tBean读取*.yml文件配置: %s\n", content.equals(pwConfig.getEncrypt1()),
                pwConfig.getEncrypt1()));
        sb.append(String.format("[%s]\tBean读取consul配置: %s\n", content.equals(pwConfig.getEncrypt2()),
                pwConfig.getEncrypt2()));
        sb.append(String.format("[%s]\tBean读取*.properties文件配置: %s\n", content.equals(pwConfig.getEncrypt3()),
                pwConfig.getEncrypt3()));
        // @Value读取
        sb.append(String.format("[%s]\t@Value读取*.yml文件配置: %s\n", content.equals(pwConfig.getEncrypt4()),
                pwConfig.getEncrypt4()));
        sb.append(String.format("[%s]\t@Value读取consul配置: %s\n", content.equals(pwConfig.getEncrypt5()),
                pwConfig.getEncrypt5()));
        sb.append(String.format("[%s]\t@Value读取*.properties文件配置: %s\n", content.equals(pwConfig.getEncrypt5()),
                pwConfig.getEncrypt5()));
        return sb.toString();
    }
}

输出结果如下:

Test Config Encrypt/Decrypt:
[true]    内存读取*.yml文件配置: TX_PwDemO_1hblsqT
[true]    内存读取consul配置: TX_PwDemO_1hblsqT
[true]    内存读取*.properties文件配置: TX_PwDemO_1hblsqT
[true]    Bean读取*.yml文件配置: TX_PwDemO_1hblsqT
[true]    Bean读取consul配置: TX_PwDemO_1hblsqT
[true]    Bean读取*.properties文件配置: TX_PwDemO_1hblsqT
[true]    @Value读取*.yml文件配置: TX_PwDemO_1hblsqT
[true]    @Value读取consul配置: TX_PwDemO_1hblsqT
[true]    @Value读取*.properties文件配置: TX_PwDemO_1hblsqT**