出于安全起见,我们会对项目中application.preperties文件配置的内容加密。并且尽量将springboot框架升级到高版本(稳定版本)
将springboot框架从1.4.5升级到2.2.4以后。起初使用的jasypt3.0.1的工具给项目内容加密。
顺便在这里给大家介绍一个js代码加密的网站:http://tool.chinaz.com/js.aspx。使用加密压缩以后的代码替换原来js文件里面的js脚本代码即可。本人测试可行。
jasypt3.0.1加密方法:
1. 将jasypt工具包导入,并且增加maven自动加密工具。
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.1</version>
</dependency>
<build>
<plugins>
<plugin>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-maven-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</build>
2. 将application.preperties中需要加密的内容用DEC(加密内容)包裹。
如:spring.thymeleaf.prefix=DEC(classpath:/templates/)
3. 然后使用idea打开项目目录下的命令行,执行命令,其中password对应的字符串jiami就是我们的钥匙:
mvn jasypt:encrypt -Djasypt.encryptor.password="jiami"
如果出现一些jar包报错的话,就到pom.xml文件中,将所有报错的jar包全部注释起来!阿里的jar包几乎都会报错!
4. 成功执行上面命令以后,将pom.xml中注释掉的阿里的jar包全部放开注释。这时候你会发现application.preperties文件中的DEC(classpath:/templates)已经变成ENC(*******密文***)
5.上面说明我们加密成功了,但是还无法启动,所以我们要将钥匙放到项目启动文件:
在启动文件main方法内增加钥匙:
System.setProperty("jasypt.encryptor.password", "jiami");
或者在配置文件application.perperties文件中增加钥匙配置:
jasypt.encryptor.password=jiami
6.启动项目,为了安全,我们再启动项目以后进入配置钥匙的类或文件中,将我们增加的钥匙内容删除掉,不会影响项目正常运行。
注意:本人实战发现jasypt3.0.0工具不是太稳定。有时候项目运行运行的会出现无法解密启动项目的问题。就需要重新加密。
使用:jasypt2.0.0版本的工具加密。
直接在启动类增加代码:
BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
//加密所需的salt(盐)
textEncryptor.setPassword("jiami");
//要加密的数据(数据库的用户名或密码)
String url = textEncryptor.encrypt("数据库链接");
String username = textEncryptor.encrypt("root");
String password = textEncryptor.encrypt("123123");
System.out.println("url:"+url);
System.out.println("username:"+username);
System.out.println("password:"+password);
将打印出来的加密内容加上ENC如:ENC(加密后的内容),替换掉application.preperties的内容,并且在其中增加jasypt.encryptor.password=jiami。就可以了。
记得启动以后删除jasypt.encryptor.password=jiami这段内容哦!
通过加密后,我们可以防止数据库连接、数据库密码等外泄。同时再在阿里云安全组中配置指定IP方可连接数据库端口。让数据库安全得到保障。
云端服务器其实很难防住黑客进入我们的服务器,我们能做到的就是让他白跑一趟。像关于支付的秘钥、证书路径之内的机密内容,建议放到数据库,用的时候从数据库拿就行。放在项目代码中是很不安全的。
简单说也就5个步骤:
1.导包:pom文件中导入:
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency>
2. 在启动类主函数中运行代码得到密文,将要加密的内容放入,得到加密后的密文:
public static void main(String[] args) { SpringApplication.run(PiyinApplication.class, args); //增加下面将明文加密成密文的代码(加密完成后删除) BasicTextEncryptor textEncryptor = new BasicTextEncryptor(); //加密所需的salt(盐) textEncryptor.setPassword("zidingyi"); //要加密的数据(数据库的用户名或密码) String url = textEncryptor.encrypt("数据库url"); String username = textEncryptor.encrypt("用户名"); String password = textEncryptor.encrypt("密码"); System.out.println("url:"+url); System.out.println("username:"+username); System.out.println("password:"+password); }
3.将控制台打印出来的密文用ENC()包裹替换配置文件中的明文,如:
spring.datasource.url=ENC(XkuXP6r6j3RIouXIvpOnKT5ik/GAz7SrMn6snO...)
4.将盐也就是上面的"zidingyi"这个字符串放入配置文件顶部(这个相当于程序启动解密的钥匙):
jasypt.encryptor.password=zidingyi
5.重新启动项目后,去掉配置文件顶部的:jasypt.encryptor.password=zidingyi。加密完成!