본문으로 건너뛰기

14.4 데이터베이스 패스워드 암호화 방법

설정 파일에 데이터베이스 접속 패스워드가 평문(plain-text)으로 노출되는 것을 허용하지 않는 엔터프라이즈 시스템들이 많이 있다. JBoss EAP 6에서는 패스워드를 암호화하는 방법으로 Java의 KeyStore를 사용한 RSA 방식의 높은 수준의 암호화 방식을 제공하고 있다. Java의 KeyStore를 만들고 valut.sh 파일을 실행하여 암호화한 텍스트를 standalone.xml이나 domain.xml에 설정하는 방법이다. 사용방법은 다음 URL을 참고하라.

https://community.jboss.org/wiki/JBossAS7SecuringPasswords

하지만, 이런 높은 수준의 암호화가 필요한 경우가 아니라면, SecureIndentityLoginModule을 사용하여 더 간편하게 암호화된 문자열을 사용할 수 있다.

JBoss EAP 6.2 버전에서는 다음과 같이 실행한다. 다른 버전의 JBoss에서 사용하려면 picketbox나 jboss-logging 모듈의 버전이 달라서 jar 파일의 이름을 해당 버전에 맞게 변경하여야 한다.

파라미터로 ‘password’를 입력하면 암호화된 패스워드가 출력된다. 문자열 암호화에는 내부적으로 ‘Blowfish’라는 암호화 알고리즘이 사용된다.

$ java -cp $JBOSS_HOME/modules/system/layers/base/org/picketbox/main/picketbox-4.0.19.SP2-redhat-1.jar:$JBOSS_HOME/modules/system/layers/base/org/jboss/logging/main/jboss-logging-3.1.2.GA-redhat-1.jar org.picketbox.datasource.security.SecureIdentityLoginModule password

Encoded password: 5dfc52b51bd35553df8592078de921bc

암호화된 문자열을 사용하는 보안 도메인을 standalone.xml파일이나 domain.xml파일에 아래와 같이 설정한다.

<security-domain name="*EncryptedPasswordDomain*">
<authentication>
<login-module code="SecureIdentityLogin" flag="required">
<module-option name="username" value="test"/>
<module-option name="password" value="*5dfc52b51bd35553df8592078de921bc*"/>
<module-option name="managedConnectionFactoryName" value="jboss.jca:service=LocalTxCM,name=**dataSource-1-PoolName,dataSource-2-PoolName**"/>
</login-module>
</authentication>
</security-domain>

마지막으로 암호화된 문자열을 사용할 데이터소스에 <user-name>, <password>를 삭제하고 <security-domain>을 추가한다.

<datasource ... >
...
<security>
<security-domain>EncryptedPasswordDomain</security-domain>
</security>
</datasource>

이런 방식으로 데이터베이스에 접근하는 사용자의 패스워드를 암호화하여 사용할 수 있다.