[JBoss] 관리 콘솔 패스워드 암호화
WEB/JBossAS / 2011. 11. 16. 16:32
관리 콘솔 패스워드를 암호화 없이 두기에는 좀 불안한 감이 있어서 패스워드 암호화가 필요합니다.
(물론... 아래에서 소개하는 MD5 가 강력한 것은 아니지만 일반 텍스트보다는 낫겠죠...)
환경설정
우선 security-constraint 가 적용된 모듈의 web.xml 을 확인합니다.[module.war]/WEB-INF/web.xml
<web-app>
...
<login-config>
<auth-method>DIGEST</auth-method>
<realm-name>JBoss WEB Console</realm-name>
</login-config>
...
</web-app>
...
<login-config>
<auth-method>DIGEST</auth-method>
<realm-name>JBoss WEB Console</realm-name>
</login-config>
...
</web-app>
"login-config > auth-method" 를 기존 "BASIC" 에서 "DIGEST" 로 변경합니다.
"login-config > realm-name" 은 나중에 패스워드 만들 때 필요하니 미리 체크해두시기 바랍니다.
[module.war]/WEB-INF/jboss-web.xml
<jboss-web>
...
<security-domain>java:/jaas/digest</security-domain>
...
</jboss-web>
...
<security-domain>java:/jaas/digest</security-domain>
...
</jboss-web>
security-domain 을 "java:/jaas/digest" 로 변경합니다. 추후 application-policy 로 저장될 이름입니다.
$JBOSS_HOME/server/<CONFIGURATION>/conf/login-config.xml
<application-policy name="digest">
<authentication>
<login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
flag="required">
<module-option name="usersProperties">props/digest-users.properties</module-option>
<module-option name="rolesProperties">props/digest-roles.properties</module-option>
<module-option name="hashAlgorithm">MD5</module-option>
<module-option name="hashEncoding">rfc2617</module-option>
<module-option name="hashUserPassword">false</module-option>
<module-option name="hashStorePassword">true</module-option>
<module-option name="passwordIsA1Hash">true</module-option>
<module-option name="storeDigestCallback">org.jboss.security.auth.spi.RFC2617Digest</module-option>
</login-module>
</authentication>
</application-policy>
<authentication>
<login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
flag="required">
<module-option name="usersProperties">props/digest-users.properties</module-option>
<module-option name="rolesProperties">props/digest-roles.properties</module-option>
<module-option name="hashAlgorithm">MD5</module-option>
<module-option name="hashEncoding">rfc2617</module-option>
<module-option name="hashUserPassword">false</module-option>
<module-option name="hashStorePassword">true</module-option>
<module-option name="passwordIsA1Hash">true</module-option>
<module-option name="storeDigestCallback">org.jboss.security.auth.spi.RFC2617Digest</module-option>
</login-module>
</authentication>
</application-policy>
위와 같이 새로운 application-policy 를 추가합니다.
사용자와 롤을 설정할 수 있는 파일 두개도 미리 생성해 놓습니다.
- $JBOSS_HOME/server/<CONFIGURATION>/conf/props/digest-users.properties
- $JBOSS_HOME/server/<CONFIGURATION>/conf/props/digest-roles.properties
패스워드 생성 및 설정
JBoss 에서는 패스워드를 생성할 수 있도록 클래스를 제공해줍니다. 아래와 같은 방식으로 패스워드를 생성할 수 있습니다.# java -cp $JBOSS_HOME/common/lib/jbosssx-server.jar org.jboss.security.auth.spi.RFC2617Digest username realm_name password
예를 들어 username 이 "admin" 이고 패스워드가 "vicki.tistory.com" 이라면 아래와 같은 명령을 통해 패스워드를 생성합니다.
(realm_name 은 위에서 "JBoss WEB Console" 로 정의되었기 때문에 위와 같이 사용합니다.)
# java -cp $JBOSS_HOME/common/lib/jbosssx-server.jar org.jboss.security.auth.spi.RFC2617Digest admin "JBoss WEB Console" vicki.tistory.com
RFC2617 A1 hash: c1b5f8a0d90b1b955661bc5819c7261e
RFC2617 A1 hash: c1b5f8a0d90b1b955661bc5819c7261e
생성된 패스워드를 properties 파일에 설정합니다.
$JBOSS_HOME/server/<CONFIGURATION>/conf/props/digest-users.properties
admin=c1b5f8a0d90b1b955661bc5819c7261e
$JBOSS_HOME/server/<CONFIGURATION>/conf/props/digest-roles.properties
admin=JBossAdmin,HttpInvoker
위와 같이 두개의 설정 파일에 사용자와 롤을 추가한 후 해당 모듈을 재시작하면... 정상적으로 암호화된 패스워드가 적용된 것을 확인하실 수 있습니다.
참고 자료
- http://docs.jboss.org/jbossas/guides/webguide/r2/en/html/ch05.html