Spring Springboot properties 암호화 jasypt 적용 방법, 설정파일 암호화
properties 값을 암호화 하는 라이브러리인 jasypt 적용 방법을 알아보도록 하겠습니다.
springboot는 gradle, yml을 사용하고
spring은 maven, properties 를 사용하니 필요에 따라 확인하시기 바랍니다.
Springboot
jasypt-spring-boot-starter 를 의존성 주입합니다.
1. jasypt 의존성 주입
implementation group: 'com.github.ulisesbocchio', name: 'jasypt-spring-boot-starter', version: '3.0.3'
config 파일을 작성합니다.
2. config 파일 작성
[JasyptConfig.java]
@Configuration
public class JasyptConfig {
@Bean(name = "jasyptStringEncryptor")
public StringEncryptor stringEncryptor() {
final String key = "복호화키";
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword(key);
config.setAlgorithm("PBEWithMD5AndDES");
config.setPoolSize("1");
encryptor.setConfig(config);
return encryptor;
}
}
암호화를 하는데 필요한 기본적인 설정만 하였습니다.
Password - 암/복호화 키
Algorithm - 암/복호화 알고리즘
PoolSize - 암/복호화에 필요한 인스턴스 Pool Size, 0보다 크게 설정해야 함
SimpleStringPBEConfig 를 좀 자세히 보면
아래와 같은 옵션이 있습니다. 필요에 따라 설정하시면 될 것 같습니다.
private String algorithm = null;
private char[] password = null;
private Integer keyObtentionIterations = null;
private SaltGenerator saltGenerator = null;
private IvGenerator ivGenerator = null;
private String providerName = null;
private Provider provider = null;
private Integer poolSize = null;
/**
config.setKeyObtentionIterations("1000");
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setStringOutputType("base64");
*/
이제 암호화 된 값을 확인해야 하는데 아래의 사이트로 이동하여 암호화된 값을 얻습니다.
3. 암호화 값 확인
Link : https://www.devglan.com/online-tools/jasypt-online-encryption-decryption
암호화할 값과 키를 아래와 같이 입력하고 결과를 확인합니다.
4. 암호화된 값 입력
암호화된 값과 복호화된 값이 일치하는지 확인합니다. 확인 후 jasypt bean을 연결하고 암호화된 값을 복사하여
properties 값에 입력을 합니다. ENC(W8MbNiiXQwSst8+OXWOsE4BQVTpxCl9E)
[application.yml]
#jasypt는 생략가능
jasypt:
encryptor:
bean: jasyptStringEncryptor
spring:
datasource:
url: 'jdbc:oracle:thin:@ip:port/sid'
driver-class-name: 'oracle.jdbc.driver.OracleDriver'
username: 'USER_NAME'
password: ENC(W8MbNiiXQwSst8+OXWOsE4BQVTpxCl9E)
DB 접속을 확인합니다. 이상이 없으면 완료!
Spring
jasypt-spring-boot-starter 를 의존성 주입합니다.
1. jasypt 의존성 주입
<dependency>
<groupId>org.jasypt</groupId>
<artifactId>jasypt-spring31</artifactId>
<version>1.9.2</version>
</dependency>
config 파일을 작성합니다.
2. config 파일 작성
[context-common.xml] - 여기서 값을 복호화 합니다.
<bean id="SimpleStringPBEConfig" class="org.jasypt.encryption.pbe.config.SimpleStringPBEConfig">
<property name="password" value="암호화키" />
<property name="algorithm" value="PBEWithMD5AndDES" />
<property name="poolSize" value="1" />
</bean>
<bean id="configurationEncryptor" class="org.jasypt.encryption.pbe.PooledPBEStringEncryptor">
<property name="config" ref="SimpleStringPBEConfig" />
</bean>
<bean id="propertyConfigurer" class="org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer">
<constructor-arg ref="configurationEncryptor" />
<property name="locations">
<list>
<value>classpath:/properties/database.properties</value>
</list>
</property>
</bean>
위의 springboot 와 같이 옵션을 property 태그로 추가할 수 있습니다.
3. 암호화 값 확인
springboot와 동일한 방법이니 넘어가도록 하겠습니다.
4. 암호화된 값 입력
[database.properties]
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@ip:port/sid
username=USER_NAME
password=ENC(W8MbNiiXQwSst8+OXWOsE4BQVTpxCl9E)
[context-datasource.xml] - $ 를 사용해 불러옵니다.
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:/properties/database.properties</value>
</list>
</property>
</bean>
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
<constructor-arg>
<bean class="com.zaxxer.hikari.HikariConfig">
<constructor-arg>
<props>
<prop key="jdbcUrl">${url}</prop>
<prop key="username">${username}</prop>
<prop key="password">${password}</prop>
</props>
</constructor-arg>
<property name="driverClassName" value="${driver}"/>
<property name="minimumIdle" value="5" />
<property name="maximumPoolSize" value="10" />
<property name="connectionTestQuery" value="select 1 from sys.dual" />
<property name="connectionTimeout" value="300000" />
</bean>
</constructor-arg>
</bean>
'Programing > Security' 카테고리의 다른 글
인텔리제이 Intellij 환경 변수 설정 application 설정 파일 환경변수 사용 (0) | 2024.04.03 |
---|---|
JAVA 자바 ARIA 아리아 암호화 복호화 방법 알고리즘 (3) | 2016.02.18 |
댓글