스프링 부트 프로젝트에서 DB 접속 정보 같은 민감한 정보를
암호화하지 않는다면 보안에 위험할 수 있습니다.
암호화 라이브러리로 Jasypt를 많이 사용하는데 스프링 부트에 적용하겠습니다.
pom.xml에 Jasypt 라이브러리를 추가합니다.
Jasypt 라이브러리 암복호화 설정을 담당하는 클래스를 생성하고 bean으로 등록합니다.
이 코드에서 주의 깊게 봐야 되는 부분은 19라인입니다.
암복호화에 사용되는 비밀키를 OS 환경변수에서 가져옴으로써 보안성을 강화했습니다.
혹시 환경변수에 있는 값을 못 읽으면 재부팅 한번 하시기 바랍니다.
나머지 코드에 대한 설명은 아래에서 확인하시면 됩니다.
11라인: 스프링 부트 프로젝트에서 설정을 역할을 하는 클래스를 나타내는 어노테이션
12라인: Jasypt 라이브러리를 사용하여 암복호화 하는 것을 나타내는 어노테이션
15라인: 설정 클래스에서 생성한 객체를 "jasyptEncryptorDES" 이름으로 빈 등록
17라인: Jasypt 라이브러리의 암호화 클래스 객체 "encryptor" 생성
18라인: PooledPBEStringEncryptor 클래스의 설정 담당 클래스 객체 "config" 생성
19라인: 암복호화에 사용되는 비밀키 환경 변수 "JASYPT_KEY"에서 읽어서 설정
20라인: 사용할 암호화 알고리즘 설정
21라인: 키 획득 반복 횟수 설정
22라인: 풀 크기 설정
23라인: Salt 클래스 설정
24라인: 문자열 출력 형식 설정
25라인: "encryptor" 객체에 "config" 객체 설정 등록
테스트 코드에서 DB 접속 정보를 암호화하고 확인합니다.
(DB url, username, password)
테스트 코드에서 암호화 한 값들을 "ENC()" 안에 작성해서 application.yml에 저장합니다.
그리고 앞에서 생성한 빈 "jasyptEncryptorDES"을 Jasypt 암호화를 담당하는 빈으로 설정합니다.
여기까지 설정이 끝났으면 프로젝트를 실행했을 때 DB 접속이 잘 되는 것을 확인할 수 있습니다.
Jasypt 설정에 대한 정보는 아래 블로그들을 참고했습니다.
https://goddaehee.tistory.com/321
https://jiurinie.tistory.com/112
https://kitty-geno.tistory.com/160
'dev > 스프링' 카테고리의 다른 글
Spring Boot OAuth2 로그인 (0) | 2023.11.14 |
---|---|
Spring WebSocketSession (0) | 2023.08.22 |
Spring Naver Editor 이미지 업로드 (0) | 2023.06.28 |
Spring Boot Logback (0) | 2023.06.21 |
Spring Enum 활용 (0) | 2023.06.05 |