블로그 이미지
올해목표 // 10월 어학연수 떠나자~ 자수씨

카테고리

전체글 (1457)
Brand New! (28)
주절주절 (213)
MOT (11)
해외쇼핑 (49)
쇼핑노트 (150)
취미생활 (94)
iPhone (4)
Eclipse (121)
Google (83)
Spring (31)
JAVA (176)
JavaScript (59)
WEB (49)
Database (20)
OS (26)
Tools (8)
Tips (26)
IT정보 (1)
Book (21)
Programming (37)
외부행사 (43)
주변인들 (17)
여행노트 (60)
학교생활 (30)
회사생활 (52)
사회생활 (5)
외국어공부 (12)
잡동사니 (30)
Total
Today
Yesterday
 
04-23 09:12
 

달력

« » 2024.4
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
 

최근에 올라온 글

최근에 달린 댓글


관리 콘솔 패스워드를 암호화 없이 두기에는 좀 불안한 감이 있어서 패스워드 암호화가 필요합니다.
(물론... 아래에서 소개하는 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" 를 기존 "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" 로 변경합니다. 추후 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>

위와 같이 새로운 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

생성된 패스워드를 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

Posted by 자수씨
, |

어쩌다보니 웹 서비스 업무가 할당 되어서 인증까지 확인해야 하는 신세가 되었습니다.

다행히 회사에서 JBoss 책을 발견하고 바로 작업을 진행하였습니다.


1. web.xml 에서 인증을 추가할 웹 서비스 관련 설정을 확인합니다.
[Listing. 1] [ContextRoot]/WEB-INF/web.xml

현재 웹 서비스는 /WorkflowWebServices 로 배포된 상태입니다.


2. JBoss 의 login-config.xml 설정에서 JBossWS 관련 application-policy 를 확인합니다.
[Listring. 2] [JBOSS_HOME]/server/[CONFIGURATION]/conf/login-config.xml


기존에 설정되어 있던 login-config.xml 을 이용하려 합니다.
기본적으로 JBoss 설치 시에 있는 JBossWS application-policy 를 이용하려 합니다.
인증되지 않은 사용자에 대한 설정은 잘 모르니 주석처리하였습니다.

이제 위의 application-policy 에 정의된 users 와 roles properties 를 수정합니다.
[Listring. 3] [JBOSS_HOME]/server/[CONFIGURATION]/conf/props/jboss-users.properties
#아이디=패스워드
vicki=vickivicki

[Listring. 4] [JBOSS_HOME]/server/[CONFIGURATION]/conf/props/jboss-roles.properties
#아이디=Role
vicki=webservice

jboss-users.properties 에 사용자 아이디와 비밀번호를 설정하고, jboss-roles.properties 에 사용자가 어떤 롤을 갖는지 설정합니다.



3. jboss-web.xml 을 수정합니다.
[Listing. 5] [ContextRoot]/WEB-INF/jboss-web.xml


jboss-web 설정에 <security-domain> 엘리먼트에 위에서 확인하였던 application-policy 이름을 설정합니다.
<security-domain>java:/jaas/[application-policy name]<security-domain>



4. web.xml 을 수정합니다.
[Listing. 6] [ContextRoot]/WEB-INF/web.xml


<security-constraint>: 어떤 접속에 어떤 권한으로 인증 절차를 처리할지 설정
<login-config> : 어떤 방식으로 인증을 처리할지를 설정
<security-role> : 어떤 권한을...  (-ㅁ-;;; 잘 모르겠습니다;;;;)



5. 테스트
JBoss 를 재시작하면 기존에 그냥 접속되었던 웹 서비스 WSDL 이 인증을 하라고 합니다.



아이디와 패스워드를 입력하고 확인을 누르면~ 끝입니다.





Posted by 자수씨
, |

jaas.conf 관련 실패 로그
-------------------------------------------------------------------------------
Test set: org.jasig.cas.authentication.handler.support.JaasAuthenticationHandlerTests
-------------------------------------------------------------------------------
Tests run: 4, Failures: 0, Errors: 4, Skipped: 0, Time elapsed: 0.202 sec <<< FAILURE!
testWithAlternativeRealm(org.jasig.cas.authentication.handler.support.JaasAuthenticationHandlerTests)  Time elapsed: 0.171 sec  <<< ERROR!
java.lang.SecurityException: ...\cas-server-3.3.5\cas-server-core/src/test/resources/org/jasig/cas/authentication/handler/support/jaas.conf (해당 파일이나 디렉토리가 없습니다.)

GoogleAccountsService 관련 실패 로그
-------------------------------------------------------------------------------
Test set: org.jasig.cas.authentication.principal.GoogleAccountsServiceTests
-------------------------------------------------------------------------------
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.016 sec <<< FAILURE!
testResponse(org.jasig.cas.authentication.principal.GoogleAccountsServiceTests)  Time elapsed: 0 sec  <<< ERROR!
java.io.FileNotFoundException: class path resource [DSAPublicKey01.key] cannot be opened because it does not exist

GoogleAccountsArgumentsExtractor 관련 실패 로그
-------------------------------------------------------------------------------
Test set: org.jasig.cas.web.support.GoogleAccountsArgumentExtractorTests
-------------------------------------------------------------------------------
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0 sec <<< FAILURE!
testNoService(org.jasig.cas.web.support.GoogleAccountsArgumentExtractorTests)  Time elapsed: 0 sec  <<< ERROR!
java.io.FileNotFoundException: class path resource [DSAPublicKey01.key] cannot be opened because it does not exist


위의 문제들 모두다 어떤 파일들이 없다는 것 입니다. 보아하니 인증서 관련 문제인 것 같았습니다. 하지만 아무리 구글을 뒤져봐도 나오지 않는 해결책으로 인하여 결국 CAS 소스 서버를 뒤지게 되었습니다.




이제 war도 나왔으니... 배포 테스트를...



Posted by 자수씨
, |

글 보관함

최근에 받은 트랙백