亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

前言

項(xiàng)目中的配置文件會有密碼的存在,例如數(shù)據(jù)庫的密碼、郵箱的密碼、FTP的密碼等。

配置的密碼以明文的方式暴露,并不是一種安全的方式,特別是大型項(xiàng)目的生產(chǎn)環(huán)境中,因?yàn)榕渲梦募?jīng)手的(運(yùn)維)人員可能很多,也可能是多方的(甲方、乙方甚至第三方)。本文講述基于 SpringBoot 項(xiàng)目對配置文件中的密碼進(jìn)行加密。

本文實(shí)例中密碼加密主要用到的是 Jasypt,一個JAVA的加解密庫。

加密步驟

1、在項(xiàng)目中引入以下依賴。

        <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot</artifactId>
            <version>1.18</version>
        </dependency>
        <dependency>
            <groupId>org.jasypt</groupId>
            <artifactId>jasypt</artifactId>
            <version>1.9.2</version>
        </dependency>

2、在Application.yml文件中添加以下配置信息。

# 配置文件密碼加密配置
jasypt:
  encryptor:
    password: EbfYkitulv73I2p0mXI50JMXoaxZTKJ7 # 秘鑰
    algorithm: PBEWithMD5AndDES # 加密算法
    iv-generator-classname: org.jasypt.iv.NoIvGenerator

(1)從3.0.0jasypt-spring-boot 版本開始,默認(rèn)的加密/解密算法已更改為PBEWITHHmacSHA512ANDAES_256;3.0.0以下版本默認(rèn)為 PBEWithMD5AndDES;

(2)上述algorithm 不配置的話,其默認(rèn)的秘鑰也是 PBEWithMD5AndDES;

(3)以上的 jasypt.encryptor.password 并不是很多人理解的 salt(鹽),這是加密密鑰。代碼中的salt是隨機(jī)生成的,長度默認(rèn)為8位,生成類默認(rèn)是 org.jasypt.salt.RandomSaltGenerator,可以通過配置 jasypt.encryptor.salt-generator-classname來修改。

3、通過命令獲取密文。

java -cp /Users/shiyanfei/zlb/repository/repository-zlb/org/jasypt/jasypt/1.9.2/jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="MySQL@1234" password=idss@2021 algorithm=PBEWithMD5AndDES

終端執(zhí)行上述命令會生成密文,其中:

  • /Users/shiyanfei/zlb/repository/repository-zlb/org/jasypt/jasypt/1.9.2/ 是 jasypt-1.9.2.jar 的路徑(linux環(huán)境中應(yīng)該是在/lib包下面),根據(jù)需求修改;
  • input 是明文密碼,每一個密碼都需要執(zhí)行一次;
  • password 是秘鑰。

4、修改原來的密碼配置

原來的明文密碼值,改為 ENC(xxx) ,其中xxx是密文。

例如:

1)MySQL

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/ueba?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&&useSSL=false
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: ENC(2RP1Vdsa+2wdSOgu2biAJkTCU9fnkUGD) 

2)redis

spring:
  redis:
    database: 0
    host: 10.20.24.48
    port: 6379
    password: ENC(JjPTg5GOsjV9ZBIQ2CaHr+96UgMKBgIT) 

5、添加注解

啟動類上添加@EnableEncryptableProperties。

思考:以上的步驟中,根據(jù) Jasypt 的用法,基本上完成了對配置文件中密碼的加密。但是,請思考一下,這樣處理是否真的安全合理?

優(yōu)化

如果按照嚴(yán)格的要求來,這樣處理并不是完善的。因?yàn)槊罔€和密文都暴露出來,依然是不安全的。那么,要如何處理呢?以下是我其中的一個思路,并已在項(xiàng)目中實(shí)踐。

1、首先,秘鑰通過另一個小工具生成,該小工具與項(xiàng)目無關(guān);

小工具是一個獨(dú)立的完整程序,有打包腳本和啟停腳本。篇幅所限,已將源碼上傳至 GitHub。

2、其次,秘鑰不暴露在配置文件中,而寫入代碼中(正常情況下,秘鑰基本不會變動);

/************************ CHANGE REPORT HISTORY ******************************
 ** Product VERSION,UPDATED BY,UPDATE DATE                                     *
 *   DESCRIPTION OF CHANGE: modify(M),add(+),del(-)                            *
 *-----------------------------------------------------------------------------*
 * V3.0.12,shiyanfei,2021-09-14
 * create 
 *
 *************************** END OF CHANGE REPORT HISTORY ********************/
package com.idss.radar.common.ums.bean;

import org.jasypt.encryption.StringEncryptor;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author : shiyanfei
 * @description : <p>自動配置加密信息</p>
 * @see : com.idss.radar.common.ums.bean
 * @since : 2021-09-14
 */
@Configuration
public class EncryptorConfig {
    @Bean("jasyptStringEncryptor")
    public StringEncryptor jasyptStringEncryptor() {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword("EbfYkitulv73I2p0mXI50JMXoaxZTKJ7");
      	// 注釋部分為配置默認(rèn)
        config.setAlgorithm("PBEWithMD5AndDES");
//        config.setKeyObtentionIterations("1000");
        config.setPoolSize("1");
//        config.setProviderName("SunJCE");
//        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
//        config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
//        config.setStringOutputType("base64");
        encryptor.setConfig(config);
        return encryptor;
    }
}

3、刪除配置文件中的信息

# 配置文件密碼加密配置
jasypt:
  encryptor:
    password: EbfYkitulv73I2p0mXI50JMXoaxZTKJ7 # 秘鑰
    algorithm: PBEWithMD5AndDES # 加密算法
    iv-generator-classname: org.jasypt.iv.NoIvGenerator

4、以上處理還有一個好處,就是優(yōu)化后的項(xiàng)目,既支持明文,也支持密文,密文只要加函數(shù) ENC(xxxx)。

總結(jié)

解決問題的方案沒有最好的,只有更好的。隨著要求的不斷提高,思考的不斷深入,解決問題的方案才會逐步趨近完美。

原文鏈接:
https://www.cnblogs.com/yanfei1819/p/15565862.html

分享到:
標(biāo)簽:SpringBoot
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定