Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
ISBN :
OpenConext VM을 이용한 인증 페더레이션
설치 및 관리 매뉴얼
일 자: 2014년 11월 30일
부 서: 첨단연구망센터/첨단연구망개발팀
제출자: 장 희 진
- 2 -
< 목 차 >
1 개요 및 구성도 ·············································································· 4
1.1 기술 개요 ····································································································· 4
1.2 시스템 구성도 ····························································································· 5
1.3 설치 S/W 목록 ··························································································· 5
1.4 H/W 사양 ····································································································· 6
2. S/W 설치 및 기본 환경 설정 ···················································· 7
2.1 가상화 S/W 설치 및 가상머신(VM) 생성 ············································ 7
2.2 네트워크 정보 설정 ··················································································· 9
2.3 참고사항 ····································································································· 14
3. Service Provider 서버 구축 ·················································· 17
3.1 SimpleSAMLphp 설치 ··········································································· 17
3.2 Service Provider 설정 ·········································································· 21
3.3 참고사항 ····································································································· 30
4. Identity Provider 서버 구축 ·················································· 33
4.1 SimpleSAMLphp 설치 ··········································································· 33
4.2 Identity Provider 설정 ·········································································· 33
4.3 참고사항 ····································································································· 39
5. OpenConext VM 서버 구축 ··················································· 44
5.1 OpenConext VM 설치 ··········································································· 44
5.2 SP 등록하기 ······························································································ 46
5.3 IdP 등록하기 ····························································································· 51
6. OpenConext 연동 테스트 ························································ 58
6.1 SP의 서비스 페이지 작성 ······································································ 58
6.2 SP-OpenConext-Mujina IdP 연동 ···················································· 59
6.3 SP-OpenConext-KISTI IdP 연동 ······················································ 61
6.4 참고사항 ····································································································· 67
- 3 -
7. 참고 문헌 및 사이트 ································································· 71
7.1 SP 설치 참조 ···························································································· 71
7.2 IdP 설치 참조 ··························································································· 71
7.3 OpenConext 설치 참조 ········································································· 71
- 4 -
1 개요 및 구성도
1.1 개요
Federation 기능은 사용자가 서비스 공급자(Service Provider, SP)의 웹서비스를 이용시 소속된 기관
(Institution) 혹은 신원공급처(Identity Provider, IdP)의 익숙한 인증절차를 거쳐 로그인할 수 있도록 하는
편리한 서비스이다. 본 보고서에서는 서비스 공급자(SP)와 신원 공급자(Id), 그리고 중간에서 이 두 공급자를
중계하는 Federation 기능을 제공하는 OpenConext VM 서버를 설치하고 각 구성요소의 연동하는 방법에
대해 기술한다.
[그림 1] Federation 서비스 예시
- 5 -
1.2 구성도
[그림 2] 테스트베드 전체 구성도
1.3 설치 S/W 목록
S/W 이름 SP IdP OC 설치 버전SimpleSAMLphp v v SimpleSAMLphp-1.13.0OpenConext VM v OpenConext-vm 74.4Apache v v v Apache 2.2.15*
PHP v v v PHP 5.3.3*
CentOS Vmware 이미지 v v v CentOS 6.2 VMware 이미지JAVA v v v OpenJDK 1.7.0_65*
VMWare Workstation 또는 VMWare Player v v v VMWare Workstation 9.0.2
[표 1] 설치 S/W 목록
※ * 표시는 OpenConext VM S/W에 포함되어 함께 설치되는 프로그램 목록
- 6 -
1.4 H/W 사양
1.4.1 H/W 사양
H/W 사양Memory 16.0GB Dual-Channel DDR3 @ 802MHzProcessor Intel Core i7 2700K @ 3.50GHz
Hard Disk 119GB SAMSUNG SSD 931GB Western Digital WDC
NIC Intel(R) 82579V Gigabit Network ConnectionOS Windows 7 Professional K SP1 (64-bit)Motherboard ASUSTeK COMPUTER INC. P8Z77-V (LGA1155)Graphics 1023MB NVIDIA GeForce GTX 560Optical Drives HL-DT-ST BDDVDRW CH10LS28
[표 1] 컴퓨터 H/W 사양
1.4.2 가상머신 H/W 사양
H/W 사양Memory 2 GProcessor 1Hard Disk 60 GBNetwork Adapter NATOS CentOS 6.2 (kernel v2.6.32)
[표 1] 가상머신 H/W 사양
- 7 -
2 S/W 설치 및 기본 환경 설정
2.1 S/W 설치 및 가상머신(VM) 생성
2.1.1 VMware 및 가상머신 생성
VMware S/W를 설치하고 아래 순서에 따라 SP(Service Provider), OpenConext, IdP(Identity
Provider)를 위한 가상머신 3 대를 설치한다. 가상머신은 모두 동일한 CentOS 6.2를 사용하므로 가
상머신 1 대 설치 후 이미지를 복사하여 나머지 2 대를 준비한다.
1. 가상화 S/W 설치
- VMware Workstation 또는 VMware Player를 설치한다.
2. 리눅스 가상머신 설치
- 리눅스 ISO 이미지로부터 가상머신 내 리눅스를 직접 설치하거나, 리눅스가 설치된 VMware 이미
지를 다운받아 사용한다.
- 본 설치 과정에서는 리눅스 가상머신으로 CentOS-6.2를 사용했으며 아래 SourceForge 사이트를
통해 다운로드 받는다.
http://sourceforge.net/projects/centos-6-vmware/
※ OpenConext VM은 리눅스 가상머신으로 CentOS 6 또는 RedHat EL 6 이상 설치를 권고한다.
3. VMware-tools-install 설치
- 리눅스 가상머신으로 부팅 후 VMware-tools-install 프로그램을 설치하여 모니터 등 작업환경을
최적화한다.
2.1.2 가상머신 복사
1. 가상머신 복사
- 2.1.1의 절차에 따라 가상머신이 1 대 설치되었으므로 *.vmx, *.vmdk 등이 포함된 가상머신이 설
치된 폴더 전체를 복사하여 나머지 두 대의 리눅스 가상머신을 준비한다.
2. 가상머신 환경 구성
- 8 -
- 각 가상머신 부팅 시 아래와 같이 설정한다.
※ 첫 번째 설치한 가상머신 외 복사한 가상머신 2 대의 경우 부팅 시 'I copied it'을 선택한다. 'I copied it'을 선택
한 경우, NIC 카드에 새로운 MAC address (HW address)를 생성한다.
[그림 3] 가상머신 구동 후 설정
※ 그래도 새로운 MAC address가 생성되지 않을 경우가 간혹 있으므로 복사한 가상머신들의 VM > Settings 메뉴에서
'Network Adapter' 항목을 지우고 새로 생성한다. 가상머신 부팅 후 ‘ifconfig' 명령을 통해 새로운 MAC address가
생성되었음을 확인할 수 있다.
[그림 4] 가상머신 네트워크 어댑터 재설치
- 9 -
2.2 정보 설정
2.2.1 IP 정보 설정
1. 활성화된 네트워크 인터페이스 확인
- 사용가능한 네트워크 인터페이스를 확인한다.
# ls /sys/class/net
[그림 5] 사용가능한 네트워크 인터페이스 확인
2. MAC 주소 중복 확인
- 아래 명령어를 통해 SP, IdP, OpenConext의 활성화된 인터페이스의 MAC 주소가 중복되지 않은지 확인한다.
# ifconfig
[그림 6] 맥주소 확인 (SP)
- 10 -
[그림 7] 맥주소 확인 (IdP)
[그림 8] 맥주소 확인 (OpenConext)
3. 네트워크 설정파일 생성
- 활성화된 인터페이스에 대해 아래와 같이 네트워크 설정파일을 작성하여 IP 주소를 정적으로 할당한다.
※ 네트워크 설정을 위해서는 'su'명령어를 이용해 root로 로그인 후 작업한다.
- 11 -
# cd /etc/sysconfig/network-scripts/# vi ifcfg-eth3
[그림 9] 네트워크 정보 수동설정 (IdP)
[그림 10] 네트워크 정보 수동설정 (SP)
- 12 -
[그림 11] 네트워크 정보 수동설정 (OpenConext)
- DEVICE, NAME 항목은 활성화된 인터페이스를 입력한다.
- IPADDR, PREFIX는 구성하고자 하는 IP 정보를 입력한다.
- DNS 서버주소는 아래 명령어의 결과를 통해 확인한다.
# nslookup www.naver.com
- GATEWAY의 주소는 아래 명령어의 결과를 통해 확인한다.
# netstat -rn
- 이때 MAC 주소(HWADDR)는 1의 과정에서 확인한 MAC 주소를 입력한다.
- 13 -
[그림 12] DNS 및 게이트웨이 정보 조회
4. 네트워크 서비스 재시작 및 설정정보 확인
# service network restart# ifconfig eth3
5. 도메인 네임 설정파일에 IdP/SP/OpenConext 서버에 대한 호스트 네임을 추가한다.
# vi etc/hosts
[그림 13] 도메인 네임 추가
- 14 -
6. IP 연결 확인
- ping 을 이용해 SP, IdP, OpenConext 서버 간 상호 IP 연결 및 도메인 네임을 이용한 연결성을 확인한다.
# ping 192.168.149.100# ping demo.openconext.org
2.3
2.3.1 Trouble Shooting & Tip
1. 방화벽 기능 해제
- iptables 등 로컬 Firewall 프로그램이 IP 연결 설정 시 문제가 될 수 있으므로 Firewall 기능을 모두 해제한다.
- ‘setup' 명령어의 'Firewall configuration' 에서 'Enable' 항목을 해제한다.
# setup
[그림 14] 방화벽 기능 해제
2. SE Linux 기능 해제
- 보안강화를 위한 SE linux 기능이 각종 S/W 설치를 방해할 수 있으므로 SE linux 기능을 해제한다.
- 15 -
- 현재 SE linux 설정을 확인한다.
# getenforce
- SE linux 기능을 해제한다.
# setenforce 0
※ 0 : permissive 보안에 영향을 미치는 기능이 감지되면 허용은 하지만 로그와 화면에 남김, 1 : enforcing 보안에
영향을 미치는 기능이 감지되면 시스템에서 허용안함
- 재부팅 하면 다시 활성화됨으로 설정파일을 통해 영구적으로 해제한다.
# vi /etc/sysconfig/selinux
[그림 15] SE Linux 기능 해제
‘SELINUX’ 항목을 ‘disabled’ 또는 ‘permissive’ 로 설정 변경한다.
※ ‘setenforce’를 이용한 설정은 현재 상태에서만 유효하며 재부팅하면 설정이 다시 초기화된다. 따라서 재부팅 이후
에도 모두 SE linux 기능을 비활성화시키려면 'selinux' 설정파일에 위와 같이 설정해야 한다.
3. 커맨드라인 호스트네임 표시
- 작업의 편의를 위해 커맨드라인에 해당 머신의 도메인 네임을 표시한다.
- 16 -
# setup
- Network configuration > DNS configuration 에서 Hostname 항목을 설정한다.
SP Hostname : sp-demo1.openconext.orgIdP Hostname : idp-demo1.openconext.orgOpenConext Hostname : demo.openconext.org
[그림 16] 호스트 네임 설정
- 17 -
3 Service Provider 서버 구축
3.1 SimpleSAMLphp
3.1.1 요구사항
- PHP 5.3.0 버전 이상의 PHP를 설치한다.
- Apache 등 PHP 실행이 가능한 웹서버 설치되어 있어야 한다.
3.1.2 SimpleSAMLphp 설치
1. 최신버전 확인
- 아래 사이트에서 SimpleSAMLphp의 최신버전을 확인한다.
https://simplesamlphp.org/download
2. 프로그램 소스 다운로드
- 소스를 다운로드 받아 설치한다.
# cd /var# tar xzf simplesamlphp-1.x.y.tar.gz# mv simplesamlphp-1.x.y simplesamlphp
3. 웹서버 설정
- SimpleSAMLphp 페이지(/var/simplesamlphp/www)가 IdP, OpenConext 서버로부터 인터넷 접속이
가능하도록 웹서버를 설정한다.
# vi /etc/httpd/conf/httpd.conf
- ’DocumentRoot’를 ‘/var/www/html’로 설정한다.
- 18 -
[그림 17] 웹서버 설정
- 심볼릭 링크를 생성해서 simpleSAMLphp 페이지가 인터넷 접속이 가능하도록 설정한다.
# ln -s /var/simplesamlphp/www /var/www/html/simplesaml
[그림 18] SimpleSAMLphp 경로 설정
4. SimpleSAMLphp 설정파일 설정
# vi /var/simplesamlphp/config/config.php
- 관리자 암호 설정
config.php
'auth.adminpassword' => 'tomtom',
- 아래 명령어를 이용해 랜덤문자인 ‘secretsalt’를 생성한다.
- 19 -
# tr -c -d '0123456789abcdefghijklmnopqrstuvwxyz' </dev/urandom | dd bs=32 count=1 2 > /dev/null;echo
- 생성된 문자를 'secretsalt'에 설정한다. 그리고 연락정보를 설정한다.
config.php
'secretsalt' => '0evvxlykxjdh6z427468btg6vaxcqlmb',
'technicalcontact_name' => 'Heejin Jang','technicalcontact_email' => '[email protected]',
[그림 19] config.php 파일 설정
5. 특정 기능 활성화/비활성화 설정
- SimpleSAMLphp의 특정 모듈의 기능을 default 상태에서 변경(활성화/비활성화)하고 싶으면
modules/의 해당 모듈명 디렉토리 하위에 ‘enable’ 혹은 ‘disable’ 이름의 빈 파일을 생성한다.
- 20 -
consent 모듈 활성화
# cd modules# ls -l# cd consent# touch enable
consent 모듈 비활성화
# cd modules/consent# mv enable disable
6. SP의 simpleSAMLphp 설치 페이지 접속 및 요구사항 확인
- simpleSAMLphp 설치 페이지에 접속하면 초록색과 붉은색으로 만족시켜야하는 요구사항의 만족/
불만족 점검 결과가 표시된다. 불만족 항목(붉은색으로 표시된 부분)은 추가 설치를 통해 설치를
계속 진행하기 전에 만족되어야한다.
http://sp-demo1.openconext.org/simplesaml
[그림 20] simpleSAMLphp 설치 페이지
- 21 -
3.2 Service Provider
3.2.1 생성 및 SP 기본정보 설정
1. 인증서 생성
- SSL을 통해 IdP, 즉 여기서는 OpenConext 측으로 전송하는 request/response 메시지에 서명이 가
능하도록 인증서 및 키를 생성한다.
# cd cert# openssl req -newkey rsa:2048 -new -x509 -days 3652 -nodes -out saml.crt -keyout saml.key
2. SP 설정
- 추가하고자 하는 SP('sp-demo1')의 설정사항을 아래와 같이 authsources.php에 기재한다.
- '1'의 과정에서 생성된 키 및 인증서 정보를 'privatekey' 및 'certificate'에 설정한다.
- 'idp'는 OpenConext IdP metadata URL 주소를 입력한다.
※ OpenConext IdP metadata URL : https://engine.demo.openconext.org/authentication/idp/metadata
config/authsources.php
'sp-demo1' => array( 'saml:SP', 'privatekey' => 'saml.key', 'certificate' => 'saml.crt', 'idp' => 'https://engine.demo.openconext.org/authentication/idp/metadata',),
- 22 -
[그림 21] authsources.php 설정
3.2.2 OpenConext 정보를 SP에 추가
본 절의 설치과정은 5.1절의 OpenConext VM 설치가 완료된 후에 진행한다.
1. OpenConext IdP metadata URL 접속
https://engine.demo.openconext.org/authentication/idp/metadata
2. OpenConext IdP metadata 복사
- 페이지 소스보기(View Page Source)를 한 후 페이지 소스를 복사한다.
- 23 -
[그림 22] OpenConext IdP metadata URL 접속화면
[그림 23] OpenConext IdP metadata URL 페이지의 소스보기
- 24 -
3. OpenConext IdP metadata 변환
- SP의 SimpleSAMLphp 설치사이트 접속한다.
http://sp-demo1.openconext.org/simplesaml/module.php/core/frontpage_welcome.php
- Federation > Tools > XML to simpleSAMLphp metadata converter를 클릭한다.
[그림 24] simpleSAMLphp metadata converter 메뉴
- Metadata parser> XML metadata에 ‘2’의 과정에서 복사한 metadata를 붙여넣기 한 후 ‘Parse'
버튼을 클릭한다.
- 25 -
[그림 25] metadata 변환
- 변환된 metadata를 모두 복사하여 metadata/saml20-idp-remote.php에 OpenConext IdP metadata를 추가한다.
[그림 26] saml20-idp-remote.php 설정
- 26 -
3.2.3 SP OpenConext에 등록하기
5.2절의 절차에 따라 SP를 OpenConext VM에 등록한다.
3.2.4 SP 설정 테스트
1. SP SimpleSAMLphp 설치사이트 접속
http://sp-demo1.openconext.org/simplesaml/module.php/core/frontpage_welcome.php
2. SP-OpenConext 연동 테스트
- Authentication > Test configured authentication sources 클릭 후 설정된 SP 이름(‘sp-demo1’)을 클릭한다.
[그림 27] SimpleSAMLphp 설정 테스트 메뉴
- 27 -
[그림 28] SP 선택
- 3.2.3절에 따라 SP가 OpenConext에 등록되지 않은 경우 아래 페이지가 표시된다.
[그림 29] SP가 OpenConext에 미등록된 경우
- 28 -
- 3.2.3절에 따라 SP가 OpenConext에 등록된 경우 아래 페이지가 표시된다.
[그림 30] SP가 OpenConext에 등록된 경우
3.2.5 SP OpenConext와 연동하기
SP의 웹페이지에서 접속을 가로채어 OpenConext로 연동하기 위해서 SimpleSAMLphp API를 추가하여 구현한다.
1. OpenConext 연동 구현
- 아래와 같이 simpleSAMLphp SP API를 SP의 웹페이지 이전에 삽입한다.
※ SimpleSAML_Auth_Simple()의 API 인자로는 authsources.php에 등록된 entity의 이름(‘sp-demo1’)을 넣는다.
※ SimpleSAMLphp의 주요 API 및 사용법은 simpleSAMLphp SP API reference (https://simplesamlphp.org/docs/1.5/
simplesamlphp-sp-api)를 참고한다.
- 29 -
[그림 31] SP의 index.php 예시화면 1
[그림 32] SP의 index.php 예시화면 2
- 30 -
3.3
3.3.1 Trouble Shooting & Tip
1. SimpleSAMLphp 로그파일 설정
- SimpleSAMLphp 로그메시지를 syslog의 기본 로그파일(/var/log/messages)에 남기지 않고 별도의
로그파일을 만들고 싶을 경우 아래와 같이 config.php 파일의 'logging.handler'를 ‘syslog'->'file'로
변경한다.
※ 설정 후 rsyslog 데몬을 재시작하여야 설정사항이 반영된다.
config/config.php
'logging.handler' => 'file''logging.logfile' => 'simplesamlphp.log'
# cd /var/simplesamlphp/log# touch simplesamlphp.log # chown apache:apache simeplesamlphp.log# service rsyslog restart
2. OpenConext IdP metadata 유효기간 만료 문제
‣ 증상
- SP 페이지(sp-demo1.openconext.org/simplesaml/) 접속 시 빈 화면이 표시
- Authentication > Test configured authentication sources 클릭 후 설정된 SP(‘sp-demo1’) 클릭 시
아래 페이지 표시
- 31 -
[그림 33] OpenConext IdP metadata 유효기간 만료 시
☞ 3.2.2의 절차에 따라 OpenConext IdP metadata (saml20-idp-remote.php)를 갱신한다.
☞ 이렇게 해도 문제가 해결되지 않을 때가 있는데 이것은 캐쉬된 브라우저의 에러페이지가 재로드 되는
것으로, 이때는 새 브라우저를 실행 시킨 후 재접속을 시도한다.
※ OpenConext IdP metadata가 갱신되면 가능한 SP에서도 3.2.2의 절차에 따라 최신정보에 맞게 갱신하도록 한다.
2. OpenConext page에서 IdP 이미지가 제대로 표시되지 않는 문제
‣ 증상
- OpenConext 연동 시 아래와 같이 IdP 이미지가 표시되지 않는 문제가 발생한다.
- 32 -
[그림 34] OpenConext 연동 시 IdP 이미지가 표시되지 않을 경우
☞ 접속하는 머신의 /etc/hosts 파일에 ‘static.demo.openconext.org’를 추가한다.
☞ 동일 증상이 지속되고 브라우저로 ‘static.demo.openconext.org’로 직접 접속 시 아래 화면이 표시되면
https로 연결시도 후 신뢰사이트로 등록한다.
[그림 35] 미등록된 신뢰사이트 접속 시 OpenConext 표시화면
- 33 -
사용자 인증 방법 설명authcrypt:Hash Username & password authentication with hashed passwordsauthcrypt:Htpasswd Username & password authentication against .htpasswd file
authX509:authX509userCert Authenticate against a LDAP database with a SSL client certificate
exampleauth:UserPassAuthenticate against a list of usernames and passwords.exampleauth:Static Automatically log in as a user with a set of attributes
ldap:LDAP Authenticates an user to a LDAP server
ldap:LDAPMulti Authenticates an user to one of several LDAP server. The user can choose the LDAP server from a dropdown list
sqlauth:SQL Authenticate an user against a database.radius:Radius Authenticates an user to a Radius server
4 Identity Provider 서버 구축
4.1 SimpleSAMLphp
3.1의 절차에 따라 SimpleSAMLphp를 설치한다.
4.2 Identity Provider 설정
4.2.1 인증정보 설정
1. IdP 기능 활성화
- 설정파일에 IdP 기능을 활성화한다.
config/config.php
'enable.saml20-idp' => true,
2. 사용자 인증 방식 및 정보 설정
- IdP에서 사용할 인증 방법을 결정한다. SimpleSAMLphp는 아래와 같은 다양한 인증방식을 지원한다.
- 34 -
InfoCard:ICAuth Authenticate with an InfoCard
multiauth:MultiAuthAllow the user to select from a list of authentication sources.openid:OpenIDConsumer Authenticate against an OpenID provider
saml:SP Authenticate against a SAML IdP. Can be used for bridging.authYubiKey:YubiKey Authenticate with an YubiKey
authfacebook:Facebook Authenticate with a Facebook ID
authtwitter:Twitter Authenticate with your Twitter account using the Twitter OAuth API
papi:PAPI Authenticate by means of the PAPI protocol[표 1] SimpleSAMLphp에서 지원하는 사용자 인증 방법
- 본 설치과정에서는 독립적으로 구동될 수 있는 가장 간단한 형태인 'exampleauth:UserPass' 방법
을 선택한다. 이 방법은 DB 및 다른 모듈과의 의존성 없이 설정파일 내에 사용자 ID/사용자 암호
를 저장한다.
3. 인증모듈 활성화
- 'exampleauth:UserPass' 방식을 사용하기 위해서 해당 모듈을 활성화한다.
# touch modules/exampleauth/enable
4. 사용자 인증 정보 생성
- 인증 상세정보를 설정파일인 config/authsources.php에 기재한다. 아래와 같이 두 명의 사용자에
대한 계정(student, employee)과 암호정보(studentpass, employeepass)를 생성한다.
- 35 -
[그림 36] authsources.php 설정
4.2.2 생성 및 IdP 기본정보 설정
1. 키 및 인증서 생성
- private key와 self-signed certificate 생성한다. (10년간 유효)
# cd cert/# openssl req -newkey rsa:2048 -new -x509 -days 3652 -nodes -out saml.crt -keyout saml.key
2. IdP 설정
- IdP의 기본정보를 metadata/saml20-idp-hosted.php 파일에 설정한다.
※ metadata/saml20-idp-hosted.php 파일의 ‘auth' 정보는 config/authsources.php에 추가된 이름(’idp-demo1)과 동일해야한다.
- 36 -
[그림 37] saml20-idp-hosted.php 설정
4.2.3 OpenConext를 IdP에 추가
1. OpenConext SP metadata URL 접속
https://engine.demo.openconext.org/authentication/sp/metadata
2. OpenConext SP metadata 생성
- 3.2.2의 2~3의 절차와 동일한 방법으로 OpenConext SP metadata를 변환하여 metadata/saml20-sp-remote.php에
OpenConext SP metadata를 추가한다.
- 37 -
[그림 38] saml20-sp-remote.php 설정
4.2.4 IdP OpenConext에 등록하기
1. 5.3절의 절차에 따라 IdP를 OpenConext VM에 등록한다.
2. OpenConext 연동 시 표시되는 IdP 로고(KISTI IdP 로고) 이미지 파일을 아래 경로에 IdP 서버의
아래 위치에 복사한다.
# cp kisti_logo.gif /var/simplesamlphp/www/kisti_logo.gif
4.2.5 IdP 설정 테스트
1. SP SimpleSAMLphp 설치사이트 접속
http://idp-demo1.openconext.org/simplesaml/module.php/core/frontpage_welcome.php
2. SP-OpenConext 연동 테스트
- Authentication > Test configured authentication sources 클릭 후 설정된 IdP 이름(‘idp-demo1’)을 클릭한다.
- 38 -
[그림 39] SimpleSAMLphp 설정 테스트 메뉴
[그림 40] IdP 선택
- 39 -
- IdP가 제대로 설정된 경우 아래 페이지가 표시되고 사용자 인증 후 성공적으로 로그인된다.
[그림 41] SimpleSAMLphp IdP 인증화면
4.3
4.3.1 Trouble Shooting & Tip
1. SimpleSAMLphp 로그파일 설정
- SimpleSAMLphp 로그메시지를 syslog의 기본 로그파일(/var/log/messages)에 남기지 않고 별도의
로그파일을 만들고 싶을 경우 3.3.1의 ‘1’과 같이 config.php 파일의 'logging.handler'를
‘syslog'->'file'로 변경한다.
2. OpenConext SP metadata 유효기간 만료 문제
‣ 증상
- SP 페이지(sp-demo1.openconext.org/simplesaml/) 접속 시 아래와 같은 웹페이지 표시
- IdP 서버의 log/simplesamlphp.log에 아래 그림과 같은 로그메시지가 확인됨
- 40 -
[그림 42] OpenConext SP metadata 유효기간 만료 시 표시화면
[그림 43] OpenConext SP metadata 유효기간 만료 시 IdP 로그메시지
☞ 3.2.2의 절차에 따라 OpenConext SP metadata (saml20-sp-remote.php) 갱신한다. 이때 OpenConext
IdP metadata URL이 아닌 OpenConext SP metadata를 사용한다.
https://engine.demo.openconext.org/authentication/sp/metadata
☞ 이렇게 해도 문제가 해결되지 않을 때가 있는데 이것은 캐쉬된 브라우저의 에러페이지가 재로드되는 것
- 41 -
으로, 이때는 새 브라우저를 실행 시킨 후 재접속을 시도한다.
※ OpenConext SP metadata가 갱신되면 가능한 IdP에서도 3.2.2의 절차에 따라 최신정보에 맞게 갱신하도록 한다.
3. State Information lost 문제
‣ 증상
- SP 페이지(sp-demo1.openconext.org/simplesaml/) 접속 시 간혹 아래와 같은 웹페이지 표시
[그림 44] State lost 에러 화면
☞ 브라우저 재시작 후 재접속을 시도한다.
4. SP 접속 시 디버그메시지가 출력 현상
‣ 증상
- SP 접속 및 OpenConext 연동 시 IdP 인증페이지로 연결되지 않고 IdP 소스코드에 임의로 삽입한 디
버그 메시지가 출력되는 현상 (디버그 메시지가 없을 경우 빈 화면 표시)
- saml20-sp-remote.php 또는 saml20-idp-hosted.php에서 syntax 적인 문제가 발생했을 경우 발생
- 42 -
[그림 45] SP 접속 시 디버그메시지가 출력화면
☞ saml20-sp-remote.php 또는 saml20-idp-hosted.php의 설정을 다시 확인한다.
※ saml20-idp-hosted.php 파일을 수정하면 OpenConext의 ‘service registry’ 에서 다시 import하여 최신정보를 유지하는 것이 좋다.
5. OpenConext에서 IdP metadata import 에러
‣ 증상
- IdP 측의 소스코드(SSOService.php MetaDataStorageHandler.php: getMetaData 등)에서 출력하는 디버그
메시지가 OpenConext에서 IdP metadata import 시 metadata에 포함되어 전송되므로 아래와 같은 화면 표시
[그림 46] metadata 파싱 오류 시
- 43 -
- Openconext log(/var/log/message)에 아래 메시지가 찍힘
[그림 47] 잘못된 metadata 전송 시 OpenConext 에러메시지
☞ IdP 측의 소스코드(SSOService.php MetaDataStorageHandler.php: getMetaData 등)에 삽입한 디버그 메
시지를 찾아 모두 Comment 처리한다.
※ IdP 측의 SimpleSAMLphp 소스에 삽입한 디버그 메시지를 삭제하면 OpenConext의 service registry에서 kisti-idp의 metadata가 즉시
제대로 import 되므로 IdP가 메타 데이터를 전송을 요청받으면 metadata (saml20-idp-hosted.php) 및 metadata를 로드하는 소스코드
를 실시간으로 실행하여 최신의 metadata URL 페이지를 구성하여 OpenConext 쪽으로 전송하는 것으로 추측된다.
※ IdP 측의 metadata인 saml20-idp-hosted.php 변경 시 일부항목은 변경하면 OpenConext에서 idp metadata import 시 즉시 반영되나
일부항목은 반영이 안되는 것으로 보인다 (OpenConext에서 Import 시 ‘No changes to apply’ 메시지가 출력됨).
- 44 -
5 OpenConext VM 서버 구축
5.1 OpenConext VM
5.1.1 요구사항
1. OpenConext VM 설치 요구사항
- 리눅스 가상머신으로 CentOS 6 또는 RedHat EL 6 이상 설치
- JDK 1.4 이상 설치 권고
※ JAVA_HOME 변수가 적절히 설정되어 아래와 같이 java 명령 실행이 가능해야 한다.
[그림 48] java 명령어 실행 화면
5.1.2 OpenConext VM 다운로드 및 설치
1. 설치파일 다운로드
- 아래 명령어를 사용해 OpenConext VM 설치파일을 다운로드 받고 압축을 해제한다.
# curl https://codeload.github.com/OpenConext/OpenConext-vm/tar.gz/v74.4 | tar zx
- 45 -
2. OpenConext VM 설정변경
- oc_config.sh 파일 원본을 아래와 같이 복사해 두고, 스크립트 내의 코멘트를 참조해
OpenConext-vm-75/scripts/oc_config.sh 파일을 가상머신에 맞게 설정한다.
# install -d /etc/openconext# cp OpenConext-vm-75/scripts/oc_config.sh /etc/openconext/.
- 이번 설치과정에서는 기본설정을 유지하였다.
※ host name은 기본적으로 [componentname].demo.openconext.org으로 설정된다. 변경을 원하는 경우 초기 설치 시 설정파일에서 변경한다.
3. 설치
- 설치 스크립트를 실행하여 설치를 진행한다.
# bash OpenConext-vm-74.4/scripts/install_openconext.sh
※ 설치 과정 중 중간에 멈춘 듯 보여도 기다리면 설치가 진행되니 인내를 가지고 진행한다.
※ Github OpenConext VM 설치 메뉴얼(https://github.com/OpenConext/OpenConext-vm/)에 따르면 30분 정도 소요된다고 언급되어있으나 실
제 설치 시 2시간 정도 소요되었다.
[그림 49] OpenConext VM 설치 화면
- 46 -
4. 구동 확인
- 브라우저를 실행해서 OpenConext 웹사이트를 확인한다.
[그림 50] OpenConext VM 구동 화면
5. 각 컴포넌트 실행
- 사이트 내 각 메뉴는 SP로부터 공급되는 서비스처럼 동작하므로 로그인하려면 OpenConext에 기
본적으로 설치된 (build-in) Mujina IdP로부터 인증 절차를 거쳐야한다. Mujina IdP를 선택하고 아
래 인증 정보를 이용해 로그인 한다.
User : adminPassword : secret
5.2 SP
5.2.1 Connection
1. Service Registry 로그인
- 47 -
- Mujina IdP(admin/secret)로 로그인한다.
2. SP Connection 생성
- ‘Connection' 탭에서 'Create connection' 클릭 후 Connection ID를 입력한다.
http://sp-demo1.openconext.org/simplesaml/module.php/saml/sp/metadata.php/sp-demo1
※ Connection ID 값은 SP Metadata URL과 동일하게 입력한다.
※ SP Metadata URL은 SP simpleSAMLphp 설치 페이지 (http://sp-demo1.openconext.org/simplesaml/module.php/core/
frontpage_federation.php) > Federation 탭 > Entity ID에서 알 수 있다.
- ‘SAML 2.0 SP' 선택 후 ’Create' 버튼을 클릭한다.
[그림 51] SP Connection 생성 화면
- Connection 탭에서 ‘State'를 ’Production‘으로 설정한다
- 48 -
[그림 52] SP Connection 설정 화면
5.2.2 SP Metadata
1. SP metadata 설정
- 'Import from URL' 항목에 SP metadata URL 주소를 입력하여 SP metadata를 읽어 들인다.
http://sp-demo1.openconext.org/simplesaml/module.php/saml/sp/metadata.php/sp-demo1
※ Connection ID와 SP metadata URL이 다를 경우 아래와 같은 에러가 발생하므로 두 값은 동일하게 입력한다.
- 49 -
[그림 53] SP metadata import 화면
[그림 54] SP metadata URL과 connection ID 값이 다를 경우 에러 페이지 표시
2. name 정보 설정
- Metadata 탭에서 ‘name:en’ 항목을 기재하고 save 한다. 이후부터 Dashboard의 SP list에
- 50 -
name(en)으로 표시된다.
[그림 55] SP metadata 표시 화면
5.2.3 정보 설정
1. Identity Provider 설정
- Identity Provider 탭에서 기본적인 설정(‘Allow All')을 선택하여 모든 IdP를 허용한다.
(현재 설치에서는 기본설정 유지)
[그림 56] Identity Provider 설정
- 51 -
2. Manipulation 설정
- Manipulation 메뉴는 SP에 공개되는 사용자의 Attribute 정보를 UI를 통해 수정/삭제/추가할 수
있는 기능이다. (현재 설치에서는 기본설정 유지)
[그림 57] Attribute Manipulation 설정
3. 기타 설정
- 기타 설정은 OpenConext 설치사이트 메뉴얼을 참조하여 적절히 설정한다.
(현재 설치에서는 기본설정을 유지)
5.3 IdP
5.3.1 Connection
1. Service Registry 로그인
- Mujina IdP(admin/secret)로 로그인한다.
2. IdP Connection 생성
- ‘Connection' 탭에서 'Create connection' 클릭 후 Connection ID를 입력한다.
- 52 -
http://idp-demo1.openconext.org/simplesaml/saml2/idp/metadata.php
※ Connection ID 값은 SP Metadata URL과 동일하게 입력한다.
※ IdP Metadata URL은 IdP simpleSAMLphp 설치 페이지(http://idp-demo1.openconext.org/simplesaml/module.php/core/
frontpage_federation.php) > Federation 탭 > Entity ID에서 알 수 있다.
- ‘SAML 2.0 IdP' 선택 후 ’Create' 버튼을 클릭한다.
[그림 58] IdP Connection 생성 화면
- Connection 탭에서 ‘State'값을 ’Production‘으로 설정한다.
- 53 -
[그림 59] IdP Connection 설정 화면
5.3.2 IdP Metadata
1. IdP metadata 설정
- 'Import from URL' 항목에 SP metadata URL 주소를 입력하여 IdP metadata를 읽어 들인다.
http://idp-demo1.openconext.org/simplesaml/saml2/idp/metadata.php
※ Connection ID와 IdP metadata URL이 다를 경우 아래와 같은 에러가 발생하므로 두 값은 동일하게 입력한다.
- 54 -
[그림 60] IdP metadata import 화면
[그림 61] IdP metadata URL과 Connection ID가 다를 경우 에러 페이지 표시
2. name 정보 설정
- Metadata 메뉴의 ‘name:en’을 기재하고 save 한다. 이후부터 Dashboard의 IdP list에 'name:en'
- 55 -
값으로 표시된다.
※ 'name:en' 값은 OpenConext 연동 시 표시되는 IdP의 이름이다. 이번 설치에서는 아래 값으로 입력한다.
name:en KISTI-Idp
[그림 62] IdP metadata 표시 화면
5.3.3 정보 설정
1. Service Provider 설정
- Service Provider 탭에서 기본적인 설정(‘Allow All')을 선택하여 기본적으로 모든 SP를 허용한다.
- 56 -
(현재 설치에서는 기본설정 유지)
[그림 63] Service Provider 설정
2. Manipulation 설정
- Manipulation 메뉴는 SP에 공개되는 사용자의 Attribute 정보를 UI를 통해 수정/삭제/추가할 수
있는 기능이다.
- 이 기능은 5.5 절에서 사용된다.
- 57 -
[그림 64] Attribute Manipulation 설정
3. 기타 설정
- 기타 설정은OpenConext 설치사이트 메뉴얼을 참조하여 적절히 설정한다.
(현재 설치에서는 기본설정 유지)
- 58 -
6 OpenConext 연동 테스트
6.1 SP 서비스 페이지 작성
1. SP 웹서버에서 3.2.5절을 참조해 simpleSAMLphp SP API를 이용해 아래와 같이 SP 웹페이지 방
문 시 처음 게시되는 대표 페이지(index.php)를 작성한다.
# vi /var/simplesamlphp/www/index.php
index.php
<?php require_once('/var/simplesamlphp/lib/_autoload.php');
/* We select our authentication source: */ $as = new SimpleSAML_Auth_Simple('sp-demo1');
/* We then require authentication: */ $as->requireAuth();
echo "<h1>Hello, world!</h1>"; /* And print the attributes: */ $attributes = $as->getAttributes(); echo "<pre>";
print_r($attributes); echo "</pre>";?>
- 59 -
6.2 SP-OpenConext-Mujina IdP
OpenConext VM 설치 시 기본적으로 함께 설치되는(Built-in) IdP인 Mujina IdP를 이용해
OpenConext 연동을 테스트한다.
6.2.1 절차
1. SP 접속
- sp-demo1.openconext.org에 접속한다.
http://sp-demo1.openconext.org/simplesaml/
2. Mujina IdP 로그인
- Mujina IdP에 아래 사용자 정보로 로그인 한다.
User : adminPassword : secret
[그림 65] OpenConext 연동화면
- 60 -
[그림 66] Mujina 로그인
3. 사용자가 첫 로그인 시 아래와 같이 IdP 측에 저장된 사용자 정보를 SP 제공에 동의를 요청하는
화면이 표시된다.
[그림 67] 사용자 첫 로그인 시 attribute 전송 요청 승인 화면
- 61 -
4. 아래와 같이 SP의 서비스페이지가 표시된다.
[그림 68] OpenConext 연동 및 인증 성공 후 SP 표시 화면
6.3 SP-OpenConext-KISTI IdP
4장에서 설치한 별도의 가상머신에 설치된 KISTI IdP를 이용해 OpenConext 연동을 테스트한다.
6.3.1 절차
1. SP 접속
- sp-demo1.openconext.org에 접속한다.
http://sp-demo1.openconext.org/simplesaml/
- 62 -
[그림 69] OpenConext 연동화면
2. Attribute Manipulation
- 첫 연동 시 아래와 같이 SP가 요구하는 기본정보인 uid 및 schacHomeOrganization 두 항목이 누
락되었다는 오류 메시지가 표시되므로 6.3.2절의 절차에 따라 OpenConext의 Attribute
Manipulation 메뉴를 이용하여 별도로 두 항목에 대한 정보를 IdP metadata에 추가해야한다.
- Attribute Manipulation에 의해 두 항목이 성공적으로 추가된 후 다시 테스트하면 인증 단계로 넘어
간다.
- 63 -
[그림 70] SP 요청 필수데이터 누락 시
3. KISTI IdP 로그인
- KISTI IdP에 아래 사용자 정보로 로그인 한다.
User : studentPassword : studentpass
- 64 -
[그림 71] IdP 사용자 로그인 화면
4. 사용자가 첫 로그인 시 아래와 같이 IdP 측에 저장된 사용자 정보를 SP 제공에 동의를 요청하는
화면이 표시된다.
[그림 72] 사용자 첫 로그인 시 attribute 전송 요청 승인 화면
- 65 -
5. 아래와 같이 SP의 서비스페이지가 표시된다.
[그림 73] OpenConext 연동 및 인증 성공 후 SP 표시 화면
6.3.2 IdP Attribute Manipulation
1. SP-OpenConext-IdP 연동 시 IdP에서 제공되는 metadata 중 부족한 정보를 Attribute
Manipulation 메뉴를 통해 추가한다. 이 기능을 통해 metadata의 추가/수정/삭제 기능이 가능하다.
※ IdP에서 전송된 IdP metadata에 Attribute Manipulation의 결과가 반영되어 SP에게 최종적으로 전송된다.
- OpenConext VM > Service Registry > KISTI-IdP 선택 > Manipulation 탭에 아래항목을 기입한
후 Metadata 탭의 ‘save'를 클릭한다.
$attr_uid = "urn:mace:dir:attribute-def:uid";$attr_sho = "urn:mace:terena.org:attribute-def:schacHomeOrganization"; $attributes[$attr_uid] = array('test_uid'); $attributes[$attr_sho] = array('test_sho');
- 66 -
[그림 74] Attribute Manipulation을 이용한 attribute 추가
- 참고로 삭제 시 아래와 같이 작성한다.
$attr_uid = "urn:mace:dir:attribute-def:uid";$attr_sho = "urn:mace:terena.org:attribute-def:schacHomeOrganization";unset($attributes[$attr_uid]);unset($attributes[$attr_sho]);
[그림 75] Attribute Manipulation을 이용한 attribute 삭제
4. SP페이지를 방문하여 로그인 하면 두 항목이 정상적으로 추가된 경우 인증화면으로 넘어간다.
- 67 -
6.4
6.4.1 Trouble Shooting & Tips
1. OpenConext page에서 IdP 이미지가 제대로 표시되지 않는 문제
‣ 증상
- OpenConext 연동 시 아래와 같이 IdP 이미지가 표시되지 않는 문제가 발생한다.
[그림 76] OpenConext 연동 시 IdP 이미지가 표시되지 않을 경우
☞ 접속하는 머신의 /etc/hosts 파일에 ‘static.demo.openconext.org’를 추가한다.
☞ 동일 증상이 지속되고 브라우저로 ‘static.demo.openconext.org’로 직접 접속 시 아래 화면이 표시되면
https로 연결시도 후 신뢰사이트로 등록한다.
- 68 -
[그림 77] 미등록된 신뢰사이트 접속 시 OpenConext 표시화면
[그림 78] 신뢰사이트 추가 화면 1
- 69 -
[그림 79] 신뢰사이트 추가 화면 2
2. OpenConext 네트워크 주소 초기화 문제
‣ 증상
- OpenConext VM 일시정지(suspend) 혹은 재부팅(Reboot) 후 네트워크 인터페이스에 수동으로 설
정된 IP 주소 정보가 삭제되는 문제가 발생한다.
☞ 네트워크 설정파일(ifcfg-eth*)을 통해 설정했음에도 동일한 문제가 지속되고, SP, IdP 가상머신의 경우
문제가 발생하지 않는 것으로보아 OpenConext에서만 생기는 문제로 추측된다.
☞ 아래와 같이 커맨드로 네트워크 서비스를 재시작한다.
# su /* 루트 암호 입력 */# service network restart# ifconfig
- 70 -
3. 지정된 IdP로 자동 로그인 되는 문제
- 가상머신에 쿠키정보 등이 저장되어 있어 OpenConext 연동 시 직전에 로그인 한 IdP를 통해 자동으로
로그인 되는 문제가 발생한다.
☞ Firefox 메뉴 > Advanced > Network 의 웹 캐쉬를 삭제해도 동일문제 지속된다.
☞ 아래와 같이 Firefox 메뉴 > Privacy > History 에서 History 설정을 변경한다. 즉 ’Remember history'일
경우 'Never remember history'로, ’Never remember history'일 경우 ’Remember history'로 변경한다.
[그림 80] Firefox 히스토리 설정
- 71 -
7 참고 문헌 및 사이트
7.1 SP 참조
⦁ SimpleSAMLphp Installation and Configuration
https://simplesamlphp.org/docs/stable/simplesamlphp-install
⦁ SimpleSAMLphp Service Provider QuickStart
https://simplesamlphp.org/docs/stable/simplesamlphp-sp
⦁ OpenConext SP - SimpleSAMLphp
https://wiki.surfnet.nl/display/OpenConext/OpenConext+SP+-+SimpleSAMLphp
⦁ SimpleSAMLphp Documentation
https://simplesamlphp.org/docs/stable/
7.2 IdP 설치 참조
⦁ simpleSAMLphp Installation and Configuration
https://simplesamlphp.org/docs/stable/simplesamlphp-install
⦁ SimpleSAMLphp Identity Provider QuickStart
https://simplesamlphp.org/docs/stable/simplesamlphp-idp
⦁ OpenConext IdP - SimpleSAMLphp
https://wiki.surfnet.nl/display/OpenConext/OpenConext+IdP+-+SimpleSAMLphp
⦁ SimpleSAMLphp Documentation
https://simplesamlphp.org/docs/stable/
7.3 OpenConext 설치 참조
⦁ OpenConext wiki 사이트
- 72 -
https://wiki.surfnet.nl/display/OpenConext/Installing+an+OpenConext+%28VM%29+instance+
for+development
⦁ OpenConext Github Project 사이트
https://github.com/OpenConext/OpenConext-vm/