SpringCloud config配置文件加密

一、前言

配置文件中,有些敏感数据需要加密处理。

SpringCloud config server可以结合jce实现这个功能。

二、配置

  1. 下载jce
http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
  1. 替换java_home/jre/lib/security下的两个jar包
  2. config server配置

配置文件添加

encrypt:
  key-store:
    alias: mytestkey
    location: server-rsa.jks
    password: pppppppp
    secret: ssssssss
  1. 测试加密解密

启动eureka、config-server

可以使用curl和postman测试/enrypt、/derypt,如果加密解密结果一致就没问题。

  1. 生成证书
keytool -genkeypair -alias mytestkey -keyalg RSA -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" -keypass ssssssss -keystore server-rsa.jks -storepass pppppppp

在文件夹找到生成的server-rsa.jks,复制到项目classpath。

  1. 配置中心

加密test 在rsatest-dev.yml添加以下内容

profile: '{cipher}AQCjXw/kh/GoWo/rjBB48ISnT1A74hsXg1AaVZRuOfJN0BmoiKSqJYtY/ivwe6mCOXTT3rb6ttI+fmz1zUYkjyomlU2owwz6uG6nBMuMSQdiS2ExMFGPfZwovfYbg/0IijxQ2+UDr51nNzDtTXAvAo6DhlkoCGC1MEHcRyakOg7SD1hYwUoAxls5A2v+8934iKIP2tVd+YEzHkDMYG5BS1XkiXLBV6ctVRerdlNO5XYqR7l9k8KP4uehTkZDYnuF3oJpf3ZMDHnimk9KH0KKgds3CC63X4bPPb9Ytetx/CrdZlpK9/VwQqe6b4HIu7KLM4TfsWKKiyI6n2jZ+8gEuLigfRovFQjCkG+EvMmMJKNDll/x0q47T2S1+CX4JXNAMd0='

{cipher}后的内容是待解密内容

  1. 访问配置

访问ip:port/rsatest-dev.yml

key-store配置正确情况下,可以看到profile: test

配置错误,会看到 invalid: profile:

三、拓展

1. git使用ssh登陆

因为git账号暴露也是不好的。

修改git配置

cloud:
    config:
      server:
        git:
          uri: git@gitee.com:unclehh/springcloudConfig.git
          searchPaths: repo

需要生成ssh

git config --global user.name “name”
git config --global user.email “email”
ssh-keygen -t rsa

在C:\user....sh\下会生出私钥文件id_rsa和公钥id_rsa.pub,复制id_rsa.pub的内容。

然后放到github或者其他git平台的ssh。

之后访问配置,会出现com.jcraft.jsch.JSchException: UnknownHostKey错。

需要在.ssh/下know_hosts文件添加公钥。

在linux上道理也是一样。

2. 另一种配置文件加密

jasypt安全框架继承springboot,可以实现配置加载前解密。

具体操作:

  1. 添加pom
 <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>1.16</version>
</dependency>
  1. demo
 // 密钥
    private static final String KEY = "1234567a?";
    public static void main(String[] args) {
        String ciphertext1 = encrypt("abcdefg"); // Wu11fsC0gpgSET5aU8GXUA==
        String ciphertext2 = encrypt("abcdefg"); // ESXlHsVk2YM7mGcHy2ccGg==
        System.out.println(ciphertext1);
        System.out.println(ciphertext2);
        String text1 = decrypt(ciphertext1);
        String text2 = decrypt(ciphertext2);
        System.out.println(text1);               // abcdefg
        System.out.println(text2);               // abcdefg
    }
    /**
     * 加密
     *
     * @param text 明文
     * @return 密文
     */
    public static String encrypt(String text) {
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        encryptor.setPassword(KEY);
        return encryptor.encrypt(text);
    }
    /**
     * 解密
     *
     * @param ciphertext 密文
     * @return 明文
     */
    public static String decrypt(String ciphertext) {
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        encryptor.setPassword("e!Jd&ljyJ^e4I5oU");
        return encryptor.decrypt(ciphertext);
    }
  1. 具体使用

配置加上

jasypt:
  encryptor:
    password: e!Jd&ljyJ^e4I5oU # 密钥
xxx: 
    password: ENC(jWgGELCkuxRuCI2Aqa6cF9VCxYpuKEZr)

ENC()里是待解密内容。

  1. 吐槽

虽然这种只是骗小孩子的一种方式,但是一眼看不懂明文密码还行。

原文发布于微信公众号 - 叔叔的博客(gh_b2b55a55dca8)

原文发表时间:2018-04-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏信安之路

记一次详细的勒索病毒分析

第一次写病毒分析的文章,之前表哥丢给我一个样本断断续续分析了好几天才搞明白,如有任何错误,还请各位多加指点

11200
来自专栏FreeBuf

直面冥王:最新爆发的C#敲诈木马HadesLocker解读

近日哈勃分析系统捕获到一类由C#语言编写的新的敲诈勒索木马。之前出现 的C#语言编写的木马只是简单地调用了一些C#库来辅助开发。与之相比,这次的变种增加了多层嵌...

31860
来自专栏七夜安全博客

你不知道的 HTTPS中间人攻击

研究生毕业了,好好给自己放了个假期,休息了两周,文章博客都没有更新。从大学开始基本上没过暑假,匆匆忙忙的。再过两天,就要去腾讯工作了,做了自己喜欢的网络安全,重...

18230
来自专栏听雨堂

.Net中DES加密的细节问题

一般的做法和MSDN都差不多,都是这种方式   加密:byte[]--write-->ms   解密:ms--read-->byte[]   即创建CryptS...

19490
来自专栏小筱月

https 加密、http2.0、keep-alive

HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏...

15900
来自专栏小樱的经验随笔

破解Zip加密文件常用的几种方法

从网络上下载了一个zip文件,最后却发现它是用密码保护的,或者自己用密码加密了一个很重要zip文件,但是一段时间后忘记了密码,无法打开。这个时候,我们就可能就需...

2.3K40
来自专栏七夜安全博客

你不知道的 HTTPS中间人攻击

研究生毕业了,好好给自己放了个假期,休息了两周,文章博客都没有更新。从大学开始基本上没过暑假,匆匆忙忙的。再过两天,就要去腾讯工作了,做了自己喜欢的网络安全,重...

11630
来自专栏Kirito的技术分享

JSON Web Token - 在Web应用间安全地传递信息

JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。 让我们来假想一下一个场景。在A用...

380100
来自专栏七夜安全博客

Python3实现ICMP远控后门(下)之“Boss”出场

15030
来自专栏Albert陈凯

2018-10-31 代码中的敏感信息加密方案

https://juejin.im/post/5bd79dc4f265da0acb13df0d

18440

扫码关注云+社区

领取腾讯云代金券