728x90
problem
CICD 를 하다가 application.properties 관리를 서버에서 was로 빌드때 항상 복사해 주는 번거로움이 있었다.
번거로움이라고 하기엔 조금 그렇고.... 더 보안에 신경 쓰려면 이렇게 관리하는게 맞지만
조금 더 간편한 방법을 찾다가 jasypt 라이브러리를 찾았다.
solution
Jasypt
Jasypt is a java library which allows the developer to add basic encryption capabilities to his/her projects with minimum effort, and without the need of having deep knowledge on how cryptography works.
개발자가 암호화 작동 방식에 대한 깊은 지식 없이도 최소한의 노력으로 자신의 프로젝트에 기본 암호화 기능을 추가할 수 있도록 하는 Java 라이브러리입니다. 정말 간단하게 라이브러리 추가, 암호화, key값 넘겨주기 세 가지 단계로 프로퍼티를 암호화하여 관리할 수 있습니다.
1. 적용하기
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5'
@Bean("jasyptStringEncryptor")
public StringEncryptor stringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword("password");
config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256");
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;
}
Password 부분은 빌드할때 환경변수를 넣어주어 실행 되게 할 것이다.
Algorithm 여러 알고리즘이 있다.
안되는 알고리즘도 있으니 테스트코드로 암호화 복호화를 테스트 해본 후 추가 해준다.
allPBEAlgorithms : [
PBEWITHHMACSHA1ANDAES_128,
PBEWITHHMACSHA1ANDAES_256,
PBEWITHHMACSHA224ANDAES_128,
PBEWITHHMACSHA224ANDAES_256,
PBEWITHHMACSHA256ANDAES_128,
PBEWITHHMACSHA256ANDAES_256,
PBEWITHHMACSHA384ANDAES_128,
PBEWITHHMACSHA384ANDAES_256,
PBEWITHHMACSHA512ANDAES_128,
PBEWITHHMACSHA512ANDAES_256,
PBEWITHMD5ANDDES,
PBEWITHMD5ANDTRIPLEDES,
PBEWITHSHA1ANDDESEDE,
PBEWITHSHA1ANDRC2_128,
PBEWITHSHA1ANDRC2_40,
PBEWITHSHA1ANDRC4_128,
PBEWITHSHA1ANDRC4_40
]
2.암호화 하기
https://devglan.com/online-tools/jasypt-online-encryption-decryption
위 사이트에서 편하게 암호화 할 수 있지만 뭔가 외부로 ip 나 중요 정보가 나가는게 기분이 좋지 않다면
직접 복호화 암호화 해서 사용가능하다.
아래 코드를 테스트 코드에 넣어 직접 암호화 하는 코드를 만들어 보자.
class JasyptTest(
){
@Test
fun encrypt() {
val encrypted1 = stringEncryptor("123.456")
println("ip :"+ encrypted1)
}
@Test
fun deCodingEncrypt() {
val encrypted1 = JasyptDecoding("pzerQDs1nGcglDIjIETL+/fgsFDqTU+pOTmn0z3bZhD36hqGK+SA+uErBloDLQgc")
println("ip :"+ encrypted1)
}
//암호화 (인코딩)
fun jasyptEncoding(value: String?): String {
val key = "passwd"
val pbeEnc = StandardPBEStringEncryptor()
pbeEnc.setAlgorithm("PBEWithMD5AndDES")
pbeEnc.setPassword(key)
pbeEnc.setSaltGenerator(RandomSaltGenerator())
pbeEnc.setIvGenerator(NoIvGenerator())
pbeEnc.setProviderName("SunJCE")
pbeEnc.setKeyObtentionIterations(1000)
pbeEnc.setStringOutputType("base256")
return pbeEnc.encrypt(value)
}
//복호화 (디코딩)
fun jasyptDecoding(value: String?): String {
val encryptor = PooledPBEStringEncryptor()
val config = SimpleStringPBEConfig()
config.poolSize = 1
config.password = "passwd"
config.algorithm = "PBEWithMD5AndDES"
config.keyObtentionIterations = 1000
config.saltGenerator = RandomSaltGenerator()
config.ivGenerator = NoIvGenerator()
config.stringOutputType = "base256"
encryptor.setConfig(config)
return encryptor.decrypt(value)
}
}
3.빌드
빌드시 패스워드를 넣어서 복호화 시켜주면 빌드가 완료된다.
jasypt.encryptor.password=password
끗~
728x90
'개-발 > Java + Spring + Kotlin' 카테고리의 다른 글
[Spring] JDK Dynamic Proxy 와 CGLIB (0) | 2024.04.24 |
---|---|
[Spring] Transaction 트랜잭션의 이해 (0) | 2024.04.24 |
[Spring] Fixture Monkey 테스트 라이브러리 (0) | 2024.04.06 |
[Spring Batch] 스프링 배치 개념 (0) | 2024.03.27 |
[Kotlin] build.gradle 환경변수 적용 (0) | 2024.03.18 |