yml, properties 파일을 사용하다가 보면 중요한 비밀번호 라든디 디비 url등 보이지 않았으면 하는게 있습니다.
그래서 yml, properties 파일을 암호화를 해서 민감한 정보를 특수문자로 변경해서 관리를 할수가 있습니다.
이게 jasypt, bouncycastle의 패키지를 사용을 해서 할수 있습니다.
스프링이나 스프링부트에서는 mavenrepository에서 패키지를 검색을 해서 찾을수가 있습니다.
mavenrepository에서 검색을 해서 패키지를 찾아서 하는 방법이 있구요.
pom.xml
<!-- https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot-starter -->
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.68</version>
</dependency>
pom.xml에 해당 dependency를 추가를 합니다.
gradle 방식
gradle방식은 build.gradle에 추가를 하면 되고 추가를 한후에는 해당 프로젝트에 마우스 오른쪽을 눌러서
Gradle > Refresh Gradle Project 를 꼭 클릭을 해주어야 사용이 가능 합니다.
build.gradle
// https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot-starter
implementation group: 'com.github.ulisesbocchio', name: 'jasypt-spring-boot-starter', version: '3.0.3'
// https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on
implementation group: 'org.bouncycastle', name: 'bcprov-jdk15on', version: '1.68'
해당 내용을 build.gradle에 추가를 합니다.
그러면 yml, properties에 암호화를 할 준비가 끝났습니다.
이제 config파일과 yml이나 properties에 설정을 해주면 암호화를 사용 가능 합니다.
PropertyEncyptConfiguration.java
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties;
@Configuration
@EnableEncryptableProperties
public class PropertyEncyptConfiguration {
@Bean("encryptorBean")
public PooledPBEStringEncryptor stringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
encryptor.setProvider(new BouncyCastleProvider());
encryptor.setPoolSize(2);
encryptor.setPassword("test");
encryptor.setAlgorithm("test-key-sdfsdfw");
return encryptor;
}
}
apllication.yml
jasypt:
encryptor:
bean: encryptorBean
application.properties
jasypt.encryptor.bean=encryptorBean
위와 같이 config파일과 yml, properties에 해당 빈을 추가를 해주면 끝입니다.
이제 암호화를할 test파일을 만들어야 합니다.
JasyptTest.java
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
public class JasyptTest {
public static void main(String args[]) {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
encryptor.setProvider(new BouncyCastleProvider());
encryptor.setPoolSize(2);
encryptor.setPassword("test");
encryptor.setAlgorithm("test-key-sdfsdfw");
String plainText = "test";
String encryptedText = encryptor.encrypt(plainText);
String decryptedText = encryptor.decrypt(encryptedText);
System.out.println("Enc:"+encryptedText+", Dec:"+decryptedText);
}
}
위에 테스트 파일을 실해을 하면 enc, dec가 나오는데 여기서 enc를 가져다가 yml, properties에 추가를 해주면 됩니다.
yml
password: ENC(encstring)
properties
password=ENC(encstring)
이걸 사용을 하면 민감한 정보를 암호화를 해서 외부에 유출이 되는걸 방지를 할수 있습니다.
'IT, 인터넷 > JAVA, 스프링부트' 카테고리의 다른 글
이클립스에서 일반 자바프로젝트 생성후에 자바 파일 만들기 (0) | 2021.09.15 |
---|---|
스프링부트 + jsp + yml로 게시판 만들기 - (2) 게시판 만들기 (0) | 2021.09.14 |
스프링부트 + jsp + yml로 게시판 만들기 - (1) 개발환경 설정 (0) | 2021.09.14 |
스프링부트 트랜잭션 관리하기(aop 방식) (0) | 2021.09.02 |
스프링, 스프링부트 resttemplate 사용하기 (외부와 연결하는 restapi) (0) | 2021.09.02 |