블로터 다음세대재단
  • 아이티캐너스
  • 오픈노하우
  • 소리아카이브
  • e하루616
  • 만드는 사람들
  • 함께해요
  • 궁금해요
  • 아카이브
  • 태그
  • 오픈램프 소개
 

보안에 해당되는 글 :: 2

다양한 서비스를 많이 사용하다가 보면 꼭 필요한 것이 보안과 인증 정보를 처리하는 것이다. 여기서 소개하고자 하는 JOSSO (Java Open Single Sign-On)는 Sun에서 오픈소스로 공개한 OpenSSO 처럼 무겁지 않으면서도 Java와 PHP에서 SSO 처리를 지원한다. 많은 기능을 원하지 않고 Java와 PHP 환경에서 인증 처리만 원할 경우 JOSSO를 사용해 볼 것을 권장 한다.

J2EE와 Spring 기반으로 작성된 JOSSO는 Gateway와 Agent로 구성되어 있다. Gateway는 실제로 사용자 정보를 가지고 있으면서 Agent의 요청을 받아 사용자 인증을 처리하고 Agent는 사용자 프로그램이 실행되는 곳에 같이 설치가 되어 Gateway와 통신을 하여 사용자 인증을 처리한다.

아래는 JOSSO가 지원하는 플랫폼으로 Gateway는 Java Platform을 필요로 한다. JOSSO의 지원 플랫폼 표에서 알수 있는 것 처럼 JOSS는 Java, PHP, MS .NET, MS ASP에서의 SSO를 지원 한다.

JOSSO 지원 플랫폼


JOSSO가 동작하는 방식을 간단히 설명을 해 보면
1. 사용자 페이지에 접근
2. JOSSO Agent가 이를 가로채
    - 인증 정보가 있으면 사용자 페이지를 표시 한다.
    - 인증 정보가 없으면 JOSSO Gateway에 전달
3. JOSSO Gateway가 로그인 페이지 표시하여 사용자 인증을 처리
3. 로그인이 완료되면 Gateway가 Agent에게 알림
4. Agent는 사용자/역할 정보를 제공하여 사용자 페이지를 표시


자! 이제 JOSSO를 사용하기 위해서 JOSSO의 Gateway와 Agent를 설치해 보자. 아래 정리된 내용은 "오픈소스 비즈니스 컨설팅 - JOSSO" (위키)에 정리된 사항을 발췌한 것이다. 내용중에서 localhost, $TOMCAT_HOME과 디렉토리 정보 등은 자신의 환경에 맞도록 작업 하여야 한다.


JOSSO 설치 가이드

Windows 환경에서 Apache Tomcat 6.0.16에 JOSSO Gateway(Idp)를 설치 하고, Apache HTTP Server 2.2.8상에서 수행되는 PHP 5.2.5에 JOSSO Agent(SP)를 설치 한다. 사용자 인증을 위해서는 MySQL 5.0.51을 사용한다.

설치전 사전 준비 사항

 JOSSO용 Database 설정

  • MySQL에 JOSSO에서 사용할 Schmea를 등록한다.
  • MySQL Administrator에 root 관리자로 로그인 한다.
  • 좌측 상단 창에서 "Catalogs"를 선택한다.
  • 좌측 하단의 "Schemata" 창에서 우측 마우스를 누른다.
  • "Create New Schema" 메뉴를 선택하여 Schema를 생성한다.
  • Schema 생성화면에서 "Schema name"으로 "jossodb"를 입력한다.
DB Schema 등록
  • MySQL에 JOSSO에서 사용할 사용자를 등록한다.
  • 좌측 상단 창에서 "User Administration"을 선택한다.
  • 좌측 하단의 "Users Accounts" 창에서 우측 마우스를 누른다.
  • "Add new user" 메뉴를 선택하여 사용자를 생성한다.
  • "User Information" 탭에서 "MySQL User"("josso"), "Password", "Confirm Password" 등을 등록한다.
DB 사용자 등록
  • MySQL에 JOSSO에서 사용할 사용자의 권한을 설정한다.
  • "Schema Privileges" 탭에서 사용자가 사용할 Schema("jossodb")를 선택한다.
  • "Available Privileges"의 모든 권한을 "Assigned Privileges"로 이동한다.
  • "Apply changes" 버튼을 눌려 등록된 정보를 저장한다.
권한 부여
  • MySQL Query Browser에 접속한다.
  • 상단의 "Tools" 메뉴에서 "MySQL Query Browser" 메뉴를 선택한다.
Query Browser 접속
  • 사용자의 MySQL 데이터베이스 접속 정보를 추가한다.
  • 우측의 "Schemata" 탭에서 "mysql"을 더블 클릭하여 선택한다.
  • grant all privileges on jossodb.* to josso@localhost identified by '암호'; (사용자에게 Schmea에 대한 권한을 추가)
  • flush privileges; (위 명령을 통해 설정한 권한을 데이터베이스에 반영)
  • select host, user, password from user order by user, host; (사용자의 접속 정보 확인)
접속 정보 추가
  • MySQL Query Browser가 아니라 DOS 창에서 접속 정보를 추가하는 방법
mysql -uroot -pxxx mysql
grant all privileges on jossodb.*
to josso@localhost identified by '암호';
flush privileges;
select host, user, password from user order by user, host;
exit
  • MySQL Query Browser를 실행하여 jossodb에 josso 사용자로 로그인 한다.
  • 아래 SQL문을 실행하여 JOSSO에서 사용할 table을 생성 한다.
  • MySQL에서 password는 예약어이므로 password라는 항목명은 passwd로 변경 하여 테이블을 생성 한다.
DROP TABLE IF EXISTS `josso_role`;
CREATE TABLE `josso_role` (
`name` varchar(16) NOT NULL,
`description` varchar(64) DEFAULT NULL,
PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `josso_user`;
CREATE TABLE `josso_user` (
`login` varchar(16) NOT NULL,
`passwd` varchar(20) NOT NULL,
`name` varchar(64) DEFAULT NULL,
`description` varchar(64) DEFAULT NULL,
PRIMARY KEY (`login`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `josso_user_property`;
CREATE TABLE `josso_user_property` (
`login` varchar(16) NOT NULL,
`name` varchar(255) NOT NULL,
`value` varchar(255) NOT NULL,
PRIMARY KEY (`login`,`name`),
CONSTRAINT `josso_user_property_ibfk_1`
FOREIGN KEY (`login`) REFERENCES `josso_user` (`login`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `josso_user_role`;
CREATE TABLE `josso_user_role` (
`login` varchar(16) NOT NULL,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`login`,`name`),
KEY `name` (`name`),
CONSTRAINT `josso_user_role_ibfk_2`
FOREIGN KEY (`login`) REFERENCES `josso_user` (`login`),
CONSTRAINT `josso_user_role_ibfk_1`
FOREIGN KEY (`name`) REFERENCES `josso_role` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  • InnoDB를 사용하지 않을 경우에는 "ENGINE=InnoDB DEFAULT CHARSET=utf8;" 대신 "TYPE=MyISAM;"를 사용한다.

JOSSO Gateway 설치

  • 압축을 풀어 d:/josso 폴더에 복사한다.
  • DOS 창에서 JOSSO Agent를 다음과 같이 설치 한다.
  • Windows Vista의 경우, 관리자 권한으로 실행 한다.
cd d:/josso/bin
josso-gsh.bat
gateway install --target "$TOMCAT_HOME" --platform tc60
exit
  • $JAVA_HOME 변수에 공백이 들어 있어 "지정된 경로를 찾을 수 없습니다."라는 오류가 발생할 경우에는, PATH 환경 변수에 $JAVA_HOME/bin 폴더를 추가하고 josso-gsh.bat를 다음과 같이 수정 한다.
"%JAVACMD%" %JAVA_OPTS% -jar "%BOOTJAR%" %ARGS% 를 삭제하고 아래 라인을 추가
java %JAVA_OPTS% -jar "%BOOTJAR%" %ARGS%
  • 설치가 정상적으로 진행이 되면 $TOMCAT_HOME 아래에서 다음 사항을 확인할 수 있다.
  • $TOMCAT_HOME/lib/josso-* 파일 들
  • $TOMCAT_HOME/webapps/josso 폴더
  • 설치가 완료된 후 d:/josso 폴더를 삭제한다.

 JOSSO Gateway 환경 설정

  • MySQL용 JDBC Driver를 설정한다.
  • MySQL JDBC Driver 다운로드 사이트에 접속 한다.
  • "JDBC Driver for MySQL (Connector/J)" 아래에 있는 "Download" 링크를 선택한다.
  • Source and Binaries (zip) 옆에 있는 링크를 선택하여 mysql-connector-java-5.1.7.zip 파일을 다운로드 한다.
  • zip 파일의 압축을 풀어 안에 있는 mysql-connector-java-5.1.7-bin.jar 파일을 $TOMCAT_HOME/webapps/josso/WEB-INF/lib 아래에 복사하고 Tomcat을 재기동 한다.
  • $TOMCAT_HOME/lib/josso-gateway-config.xml 파일에 사용자 정보 저장소로 DB 설정 정보를 사용하도록 수정 한다.
<!-- Identity, Session and Assertion Stores configuration -->
<s:import resource="josso-gateway-db-stores.xml" />
<!--
<s:import resource="josso-gateway-memory-stores.xml" />
<s:import resource="josso-gateway-db-stores.xml" />
<s:import resource="josso-gateway-ldap-stores.xml" />
-->
  • $TOMCAT_HOME/lib/josso-gateway-db-stores.xml 파일에서 DB 정보를 설정 한다.
  • 기존에 있는 id="josso-identity-store" 에 해당하는 것을 삭제하고, 아래 사항을 추가 한다.
  • MySQL에서 password는 예약어이므로 password라는 항목명은 passwd로 변경 하여 테이블을 생성 하였으므로 SQL문도 그에 맞도록 수정 한다.
<db-istore:jdbc-store
id="josso-identity-store"
driverName="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/jossodb"
connectionName="josso"
connectionPassword="암호"
userQueryString="SELECT LOGIN AS NAME FROM JOSSO_USER WHERE LOGIN = ?"
rolesQueryString="SELECT NAME AS ROLE
FROM JOSSO_USER_ROLE WHERE LOGIN = ?"
credentialsQueryString="SELECT LOGIN AS USERNAME, PASSWD password
FROM JOSSO_USER WHERE LOGIN = ?"
userPropertiesQueryString="SELECT NAME, VALUE
FROM JOSSO_USER_PROPERTY WHERE LOGIN = ?"
resetCredentialDml="UPDATE JOSSO_USER SET PASSWD = ? WHERE LOGIN = ?"
relayCredentialQueryString="SELECT LOGIN FROM JOSSO_USER WHERE #?# = ?"
/>
  • $TOMCAT_HOME/lib/josso-gateway-auth.xml 파일에서 기본 인증 정보를 수정한다.
  • hashAlgorithm, hashEncoding를 삭제하여 암호가 Plan Text로 저장되도록 한다. (현재는 테스트용으로, 향후에는 이를 사용하여 암호가 암호화되어 저장되도록 하여야 한다.)
   <basic-authscheme:basic-auth-scheme
id="josso-basic-authentication"
ignorePasswordCase="false"
ignoreUserCase="false">

<basic-authscheme:credentialStore>
<s:ref bean="josso-identity-store"/>
</basic-authscheme:credentialStore>

<basic-authscheme:credentialStoreKeyAdapter>
<s:ref bean="josso-simple-key-adapter"/>
</basic-authscheme:credentialStoreKeyAdapter>

</basic-authscheme:basic-auth-scheme>

 PHP용 JOSSO Agent 설치

  • 압축을 풀어 d:/josso 폴더에 복사한다.
  • d:/josso/dist/agents/src/josso-php-agent-1.8.0-.zip의 압축을 풀어 d:/josso_php 폴더에 복사한다.
  • PHP에 JOSSO Agent를 설정 한다.
mkdir c:/php/includes
c:/php/includes 아래에 d:/josso_php/josso-php-inc 폴더를 통채로 복사한다.
  • JOSSO Agent 설정 파일은 c:/php/includes/josso-php-inc/josso-cfg.inc 이다.
  • $PHP_HOME에 있는 php.ini 파일에서 다음과 같이 수정 한다.
include_path = ".;c:\php\includes"
auto_prepend_file = "josso-php-inc\josso.php"
  • 테스트를 위해 d/:/josso/dist/samples/apps/josso-partner-php-1.8.0-.zip 파일의 압축을 풀어 index.php 파일을 Apache HTTP Server의 Document Root에 index_josso.php로 이름을 바꾸어 저장 한다.
  • 설치가 완료된 후 d:/josso 폴더와 d:/joss_php 폴더를 삭제하고 Apache HTTP Server를 재기동 한다.

 PHP용 JOSSO Agent 환경 설정

  • JOSSO Agent 설정 파일(c:/php/includes/josso-php-inc/josso-cfg.inc)에서 다음을 수정 한다.
  • JOSSO Gateway의 IP 또는 URL(예, www.josso.com)을 사용하여 설정한다.
  • josso_endpoint는 JOSSO Gateway의 IP를 사용하여 설정한다.
// Josso agent configuration
$josso_gatewayLoginUrl = 'http://gatewayURLorIP:8080/josso/signon/login.do';
$josso_gatewayLogoutUrl = 'http://gatewayURLorIP:8080/josso/signon/logout.do';

// WS client configuration :
$josso_endpoint = 'http://gatewayIP:8080';

 JOSSO 설정 확인

테스트가 끝나면 Document Root에 있는 index_josso.php 파일을 삭제 한다.



이제 JOSSO Gateway와 Agent의 설치가 완료 되었다. JOSSO Agent 중에서 PHP용 Agent가 사용자 프로그램(PHP)에 제공하는 정보(변수)와 기능(함수)를 살펴 보자.

 PHP에 JOSSO 적용

  • JOSSO Agent가 PHP에 제공하는 정보 명세
$josso_agent  : JOSSO Agent
$ssoSessionId : JOSSO Session ID

$user = $josso_agent.getUserInSession() : 세션에 있는 사용자 정보 반환
$roles = $josso_agent->findRolesBySSOSessionId($sessionId) : Roles을 반환
$josso_agent.isUserInRole($rolename) : 해당 Role에 속하는지 여부 반환

$user->getName() : 사용자 명(사용자 아이디)을 반환
$user->getProperties() : 사용자의 모든 Properties를 반환
$user->getProperty('user.name') : 사용자의 해당 Property를 반환
  • JOSSO Agent가 PHP에 제공하는 함수 명세
jossoRequestLogin() : 로그인 페이지로 가고 싶을 때 호출
jossoCreateLoginUrl() : 로그인 URL을 반환
jossoRequestLoginForUrl($currentUrl) : 로그인 페이지 호출
로그인 후 인수로 전달된 페이지 호출

jossoRequestLogout() : 로그아웃을 하고 싶을 때 호출
jossoCreateLogoutUrl() : 로그아웃 URL을 반환
jossoRequestLogoutForUrl($currentUrl) : 로그아웃 페이지 호출
로그아웃 후 인수로 전달된 페이지 호출

*** 참고 문헌 ***


트랙백 주소 :: http://openlamp.co.kr/trackback/101

오픈소스는 이제 기업 시장에서 상당히 광범위하게 사용되고 있다. 유연한 가격과 성숙된 제품으로 최고의 시기를 눈 앞에 둔 상황이다. 해외에 비해서는 그 활용도나 기여도가 떨어지고 있지만 국내에서도 고객들의 활용이 점차 늘어나고 있다. 또 국내에 기반을 둔 오픈소스 소프트웨어 업체들도 속속 생겨나고 있다.

이런 상황에서 이미 많은 검증을 거치고 소비자들이 선택한 제품들은 어떤 것들이 있을까? CIO인사이트는 비즈니스용으로 활용 가능한 오픈소스의 10대 분야에 대한 글을 소개했다. 어떤 영역에 어떤 오픈소스들이 고객들이 선택을 기다리고 있을지 살펴보자.

1. 운영체제(Operating systems). 1994년 첫번째 리눅스가 릴리즈 되고 꾸준히 시장에서 성장하고 있다. 시장 조사 기관인 가트너(Gartner)의 2008년 5월 자료에 따르면 리눅스는 서버 운영 체제 분야에서 가장 빠르게 성장하는  제품이었다.

2. 고객관계관리(CRM : Customer Resource Management). 오픈소스 CRM 프로젝트의 수가 늘고 있다. 가장 유명한 프로젝트로는 SugarCRM(www.sugarcrm.com/crm), SplendidCRM(www.splendidcrm.com), ConcourseSuite(www.concursive.com/concoursesuite.shtml)과 Hipergate(www.hipergate.org) 등이 있다.

3. 전사적자원관리(ERP : Enterprise Resource Planning). ERP에도 오픈소스 제품이 있다는 것은 놀라운 일이다. SAP와 오라클, 국내 기업으로는 영림원 같은 상용 제품이 있는데 전세계적으로 몇몇 고객들은 비싼 상업용 ERP에서 오픈소스 ERP로 옮기기도 한다고. 관련 프로젝트에는 Compiere(www.compiere.com), Openbravo(www.openbravo.com), PostBooks(www.xtuple.com/postbooks) and JFire(www.jfire.org).

4. 모바일 컴퓨팅과 통신. 오픈소스는 가장 빠르게 모바일 기술분야에 적용되고 있다. 대표적인 것이 바로 리모파운데이션(www.limofoundation.org) 이다. 리모는 2007년 1월, 리눅스 운영체제(OS) 기반의 모바일 플랫폼 표준화 개발을 위해 삼성전자, 모토로라, 보다폰, NTT도코모, NEC, 파나소닉, 오렌지 등 7개 회사가 설립했고, 국내외 단말기 제조사와 통신관련 업체들이 참여하고 있다. 국내 업체로는 설립 멤버인 삼성전자를 비롯해 코어 멤버인 LG전자, 어소시에이트 멤버인 KTF, 삼성SDS, ETRI, SK텔레콤와 SK이노에이스 등이 참여하고 있다.

5. 비즈니스인텔리전스(BI : Business Intelligence).오픈 소스 BI 프로젝트에는 이클립스 기반의 리포팅과 BI 기능을 제공하는 BIRT(www.eclipse.org/birt/phoenix)와 쿼리와 리포팅, 인터랙티브한 분석과 대시보드 기능을 제공하는 Pentaho BI Suite(www.pentaho.com)가 있다.

6. 애플리케이션 개발. 애플리케이션 개발과 소프트웨어 스텍의 레이아웃을 디플로이할 때 많이 사용되는데 이클립스(Eclipse; www.eclipse.org)는 가장 대표적인 예다. 오는 3월 이클립스콘(Eclipsecon) 2009 행사가 미국에서 열린다. 참석해 보면 오픈소스 분야의 변화를 한눈에 확인해 볼 수 있을 것 같다.

7. VoIP 텔레포니. 오픈 소스 VoIP 제품을 제공하는 회사들로는 Digium, Fonality, Bluesocket 등이 있고, 오픈소스 VoIP 프로젝트로는 Asterisk, CallWeaver (이전엔 OpenPBX), SipXecs 등이 있다.

8. 웹 브라우저(Web browsers). 가장 대중적인 인기를 끌고 있는 오픈 소스 웹 브라우저는 모질라의 파이어폭스(Mozilla Firefox)이다. 2009년 1월 넷 애플리케이션의 조사에 따르면 파이어폭스의 시장 점유율이 21%까지 높아졌다고 한다. 한국은 언제나 이런 세계적인 흐름에 동참할 수 있을까? 표준을 외면한 대가가 너무나 크다는 사실을 언제쯤 정부와 법원은 깨닫게 될까?

9. 가상화(Virtualization). 오픈 소스 가상화 소프트웨어는 기업들이 낮은 총소요비용(TCO : total cost of ownership)으로 구축이 가능하다. 가장 인기가 높은 오픈 소스 가상화 소프트에어는 젠 하이퍼바이저(Xen hypervisor)이다. 윈도와 리눅스를 지원하는 젠 하이퍼바이저는 시트릭스, 썬, 오라클의 가상화 제품의 근간이 되고 있고, 최근 국내 고객들이 VM웨어의 고비용 구조를 탈피하기 위해 가장 많이 검토할 가상화 소프트웨어 중 하나로 부각될 것으로 보인다.

10. 보안(Security). 가장 잘 알려진 취약점 스캐너(vulnerability scanner)인 Nessus, 침입탐지(intrusion detection system)와 방지 제품인 Snort, 시큐어 소켓 레이어와 전송 레이트 보안 프로토콜 사용을 위한 툴 킷인 Open SSL 등이 있다. 오픈 소스 보안 제품들은 그 종류가 많아 IT 보안 조직에서 인기가 많다.

집단지성을 대표하는 것 중 하나인 오픈소스. 그 어느 때보다 오픈소스에 대한 관심이 높아지고 있는 시기다.

트랙백 주소 :: http://openlamp.co.kr/trackback/91

  1. |
    2009/02/04 19:37

    오픈소스가 환대받는 10가지 IT 영역 (http://kr.news.yahoo.com/service/news/shellview.htm?linkid=4&articleid=20090130210645863j0&newssetid=1352)에서 이 기사를 보았는데, 오픈소스의 링크까지 자세히 걸려 있어 이 기사가 더 좋은 것 같다.

  2. |
    2011/07/14 16:11

    좋은 글 감사합니다. 담아갑니다.

  3. |
    2011/12/30 12:53

    <a href="http://www.hatbrandshop.com/cheap-877-caps-new-era-Washington-Redskins-hats-Wine-RedYellow.html">caps new era</a>,
    <a href="http://www.hatbrandshop.com">new era hats</a> ,

    <a href="http://www.hatbrandshop.com">snapback caps</a>,

    <a href="http://www.hatbrandshop.com">flexfit baseball hats</a>

  4. |
    2011/12/30 12:53

    [url=http://www.hatbrandshop.com/cheap-895-fedora-hats-for-men-Leather-hats-DC-Black.html]Fedora hat[/url]

    [url=http://www.hatbrandshop.com/wholesale-4-b0-NFL-hats.html]NFL hat[/url]

    [url=http://www.hatbrandshop.com/cheap-846-nfl-sideline-hats-New-Orleans-Saints-hats-OrangeBlack.html]New Orleans Saints[/url]

    [url=http://www.hatbrandshop.com/wholesale-84-b0-New-Orleans-Saints-hats.html]New Orleans Saints hats[/url]
    [url=http://www.hatbrandshop.com]new era hats[/url]