yml 암호화
Jasypt 를 통한 암호화
사용 이유
yml 파일에 DB에 연결해야할 민감한 정보가 있어 github에 올릴때 항상 해당 yml파일을 삭제했다.
근데 팀원이 jasypt를 사용하여 간단하게 평문으로 작성한 yml 파일을 암호화 할수 있다 알려줘 시도해보려고 했다.
Jasypt
Jasypt는 Java의 라이브러리로, 텍스트, 이미지, 바이너 데이터, XML등 다양한 형태의 데이터를 암호화하고 해독할수 있게 해준다.
또한 생각보다 다양한 암호화 알고리즘을 지원하며, AES, DES, RSA 등을 사용하여 암호화 할수있다.
이번에는 PBE (Password-Based-Encryption)을 사용하는 알고리즘인 PBEWithMD5AndTripleDES
을 사용하여 평문을 암호화할 생각이다.
1. gradle에 Jasypt 의존성 추가하기
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5'
2. yml 파일에 Jasypt 설정 추가
jasypt:
encryptor:
iv-generator-classname: org.jasypt.iv.NoIvGenerator
algorithm: PBEWithMD5AndTripleDES
password를 yml에 작성했을때 password 지우는걸 깜빡할수 있기때문에 외부설정(VM)을 통해 추가하기로 했다.
3. VM을 통해 password 설정하기
아래와 같은 test코드를 통해 우리가 원하는 평문을 암호화 할 것이다.
단순히 암호화 할 내용에 암호화 하고싶은 내용을 넣어주면 된다.
@SpringBootTest
class IssueTrackerApplicationTests {
@Autowired
StringEncryptor stringEncryptor;
@Test
void contextLoads() {
//암호화
String encrypt = stringEncryptor.encrypt("암호화 할 내용");
System.out.println("암호화된 내용 = " + encrypt);
//복호화
String decryptedString = stringEncryptor.decrypt("복호화 할 내용");
System.out.println("복호화된 내용 = " + decryptedString);
}
}
test 코드로 진행할때 junit에 VM을 통해 jasypt
를 암호 및 복호화할 password
를 설정해줘야 하는데 설정방법은 다음과 같다.
4. Junit에 VM설정하기
일단 intellij settings에 들어가 Run tests using
을 Intellij 로 바꿔준다.
이렇게 설정을 바꾸게되면 테스트코드 실행시 Junit을 통해 실행하게 되는데, 이때 오른쪽 상단에 존재하는 edit configurations..
에 들어가준다.
그후 왼쪽 하단에 있는 Edit configuration templates
를 눌러 Junit에대한 VM을 설정해주면 된다.
VM에 password를 넣는 형식은 아래와 같다.
-Djasypt.encryptor.password=비밀번호
이때 만약 VM을 넣는 칸이 없다면 Modify options
를 눌러 Add VM Options
를 클릭해 VM을 넣을수 있는 칸을 추가해주자.
이렇게 VM까지 설정을 해 주었다면 아래와 같은 test코드를 통해 평문을 암호화 하면 된다.
@SpringBootTest
class IssueTrackerApplicationTests {
@Autowired
StringEncryptor stringEncryptor;
@Test
void contextLoads() {
String encrypt = stringEncryptor.encrypt("암호화 할 내용");
System.out.println("암호화된 내용 = " + encrypt);
}
}
암호화 할 내용
에 암호화할 평문을 넣어주고 테스트를 실행하면 결과창에 암호화된 내용이 나오게 된다.
예를 들어 Application.yml에 존재하는 MySql 연결에 필요한 url을 암호화한다고 했을때 결과는 아래와 같다.
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: ENC(FqsfaB7VH3b02cmEcA7KnxoD/ka7bdJuI96EOmDc0ll0rq5kR51OxaUgub3w9j2+J6fpn+coGLEicAzsp8cPFvLdQHjRP0xWrK7+ZPyliLp58BPtgAKSC8nWePGmgAYNTLBMIQWZUekLOHMv)
username: ENC(emlpBQxxnd)
password: ENC(KDNBYKmj3c8n)
이렇게 ENC
표기후 괄호안에 테스트코드를 통해 암호화된 내용을 넣어주면 추후 VM에 존재하는 Password를 통해 복호화가 가능해져, 우리가 해당 yml 파일을 github에 올리더라도 password를 외부로 유출하지 않으면 보안상 안전하게 된다
'Spring' 카테고리의 다른 글
docker hub 사용하는 방법 (1) | 2023.11.27 |
---|---|
redis를 통해 로그아웃 기능 구현 (0) | 2023.11.27 |
checkedException, uncheckedException (1) | 2023.11.22 |
Transactional을 통한 rollback시 AUTO_INCREMENT 초기화 문제 (0) | 2023.07.06 |
@JdbcTest (0) | 2023.07.05 |