ID 제공자의구축 - Korean Access Federation (KAFE) - 한국과학기술정보연구원
목 차 제 1 장설치환경제 2 장 simplesamlphp 의설치제 3 장 SAML ID 제공자의설치제 4 장 ID 제공자와사용자 DB 의연동제 5 장사용자속성의제어제 6 장메타데이터의설정제 7 장사용자인터페이스의변경제 8 장 Consent 화면의변경제 9 장보안설정제 10 장기타설정
SAML ID 제공자시스템의구축 2015.09.24. - 내용추가 2015. 08. 20. - 초안 제 1 장설치환경 본 설치매뉴얼은 simplesamlphp 1.13 버전을 이용해 Ubuntu 또는 CentOS 환경에서 SAML 2.0 IdP(Identity Provider) 를 구축하는 방법을 기술한다. IdP 의 구축을 위해 다음과 같은 요구조건이 충족되어야한다. - LAMP 스택의설치 : Apache, MySQL, PHP 5.3 이상 - 공인인증서 (SSL) 의설치 제 2 장 simplesamlphp 의설치 2.1 절 simplesamlphp simplesamlphp 는 UNINETT 에서개발한 SAML v2.0 소프트웨어이다. IdP 또는 SP(Service Provider) 로설치가능하며최신버전은 1.13.2 이다 (2015 년 9 월 ). 이하 IdP 또는 SP 는 SAML 2.0 IdP 또는 SAML 2.0 SP 를의미한다. simplesamlphp.org 에서추가적인정보를얻을수있다. 2.2 절 simplesamlphp 의설치환경 simplesamlphp 의설치를위한서버환경은다음과같다. 특별한언급이없는한 ID 제공자용서버는 Ubuntu 14.04 LTS(64 비트 ) 를이용한다. - php, MySQL, httpd 가설치 - IPv6 disable 권장 - selinux disable - Linux 방화벽 (iptables) 80/443(http/https) 포트개방 - 시간동기화를위한 NTP 설정 (NTP 서버 : time.kriss.re.kr) 2.3 절 simplesamlphp 의설치 simplesamlphp 의구동을위해요구되는소프트웨어패키지를설치한다. simplesamlphp 의설치경로는 /var/simplesamlphp 로가정한다. ~# clear
~# sudo apt-get install php-date openssl php5-mcrypt // 인증소스로 LDAP 를이용하경우 ~# sudo apt-get install php5-ldap //simplesamlphp 다운로드 ~#sudo wget https://simplesamlphp.org/res/downloads/simplesamlphp-1.13.2.tar.gz // 압축해제및설치 ~# sudo cp./simplesamlphp-1.13.2.tar.gz /var/ ~# sudo cd /var ~# sudo tar zxvf./simplesamlphp-1.13.2.tar.gz ~# sudo mv./simplesamlphp-1.13.2./simplesamlphp 2.4 절 Apache 서버설정 아래설정방법은 HTTP(80 포트 ) 에대한환경설정을보여준다. HTTPS(443) 에대한 Apache 환경설정방법은생략한다. ID 제공자서버는반드시공인인증서를설치하고 HTTPS(443) 을이용해야한다. ~# sudo cd /etc/apache2/sites-available ~# sudo nano 000-default.conf // <VirtualHost *:80> 을찾아아래와같이수정 <VirtualHost *:80> DocumentRoot /var/www/html/ Alias /simplesaml /var/simplesamlphp/www ~# sudo nano /etc/apache2/apache2.conf // 다음과같은항목을추가 <Directory /var/simplesamlphp/> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> ~# sudo service apache2 restart
2.5 절 simplesamlphp 의구동환경설정 아래와같이 simplesamlphp 를환경설정한다. 'secretsalt' 는다음명령을이용해추출할수있다. tr -c -d '0123456789abcdefghijklmnopqrstuvwxyz' </dev/urandom dd bs=32 count=1 2>/dev/null;echo ~# sudo cd /var/simplesamlphp/config ~# sudo nano config.php // 아래와같이환경설정함 'baseurlpath' => 'simplesaml/', 'certdir' => 'cert/' 'loggingdir' => 'log/', 'datadir' => 'data/', // 다음사항은꼭수정해야함 'auth.adminpassword' => '[ 관리용패스워드입력 ]', 'secretsalt' => '[secret salt 입력 ]', 'technicalcontact_name' => '[ 관리자이름 ]', 'technicalcontact_email' => '[ 관리자이메일 ]', 'language.default' => 'en', 'timezone' => 'Asia/Seoul', simplesamlphp 에서제공하는특정모듈을활성화하고싶다면 [ 모듈명 ] 디렉토리에서 enable 파일을생성한다. 다음예는 LDAP 모듈을활성화하기위한방법이다. ~# sudo cd /var/simplesamlphp/modules ~# sudo cd./ldap ~# sudo touch enable 환경설정이완료되었다면웹브라우저를이용해 http://[ 서버주소 ]/simplesaml 을접속한다. 정상적으로설치되었다면아래와같은화면이나타난다.
2.6 절설정된환경의검증 Authentication 탭에서 admin 으로로그인한다. 현재 IdP 가활성화되지않은상태이므로 2 와같이적색원이보여야한다. admin 으로로그인한후 3 과같이표시된다면정상적으로설치된상태이다. 관리자이메일과 LDAP Extension 을설치했다면모두녹색원으로표시되어야한다.
제 3 장 SAML ID 제공자의설치 3.1 절 ID 제공자기능의활성화 환경설정파일을수정해 IdP 기능을활성화시킨다. SAML2.0 이외에 SAML1.0 을지원하기위해서는 'enable.shib13-idp' 를 true 로설정한다. ~# sudo cd /var/simplesamlphp/config ~# sudo nano config.php // 아래와같이수정한다. 'enable.saml20-idp' => true, 'enable.shib13-idp' => false, 'enable.adfs-idp' => false, 'enalbe.wsfed-sp' => false, 'enable.authmemcookie' => false, 위와같이환경설정을한후웹브라우저를이용해접근했을때다음과같이 SAML 2.0 IdP 항목이녹색원으로표시되어야한다. 3.2 절인증소스의선택 simplesamlphp 는 LDAP, LDAPMulti, SQL, Radius 등다양한사용자인증소스와의연동을지원한다. 더자세한사항은 simplesamlphp.org 를참조한다. 본매뉴얼에서는 exampleauth:userpass 모듈을이용해사용자를인증한다. 모듈을다음과같이활성화시킨다. 이하 employee/employeepass( 사용자 ID/ 비밀번호 ) 또는 student/studentpass( 사용자 ID/ 비밀번호 ) 로사용자인증이가능하다. ~# sudo cd /var/simplesamlphp/modules/exampleauth ~# sudo touch enable ~# sudo cd /var/simplesamlphp/config ~# sudo nano authsources.php // 아래와같이 authsources.php 를수정한다.
/* ( 주석제거 ) 'example-userpass' => array( 'exampleauth:userpass', 'employee:employeepass' => array( 'uid' => array('employee'), 'edupersonaffiliation' => array('member', 'employee'), ), ), */( 주석제거 ) 3.3 절 SSL 자가인증서의생성 아래 [myidp.mydomain.ac.kr] 은 IdP 구축자의기관환경에맞게적절히변경해야한다. Common Name (e.g., server FQDN or YOUR name) 은 IdP 용서버의 IP 주소또는도메인명으로설정해야한다. 자가인증서를생성한후환경설정을계속한다. ~# sudo cd /var/simplesamlphp ~# sudo mkdir cert // 생성된.cert 파일과.pem 파일은 /var/simplesamlphp/cert 디렉토리로이동 IdP 의메타데이터를수정해자가인증서를등록한다. 인증소스 'example-userpass' 는앞서 authsources.php 에등록한인증소스의이름과일치해야한다. 본매뉴얼은 authsources.php 등록된이름 'example-userpass' 를이용한다. ~# sudo cd /var/simplesamlphp/metadata
~# sudo nano saml20-idp-hosted.php // 아래와같이수정해인증서를등록한다. 'privatekey' 'certificate' => '/var/simplesamlphp/cert/[ 인증서이름 ].pem', => '/var/simplesamlphp/cert/[ 인증서이름 ].crt', // 인증소스의등록 'auth' => 'example-userpass', 3.4 절환경설정의검증 http://[ 서버주소 ]/simplesaml 에접속해설정된 SAML IdP 환경이정상적으로동작하는지확인한다. Authentication 탭에서 Test configured authentication sources 를선택하면등록된인증소스의목록을확인할수있다. Example-userpass 를선택한후 student/studentpass( 사용자 ID/ 비밀번호 ) 를이용해로그인하면다음그림과같이 uid 와 Affiliation 정보가화면표시된다. 3.5 절 ID 제공자의메타데이터확인 SAML 2.0 은 IdP 와 SP 간신뢰관계를확인하기위해메타데이터를교환한다. IdP 와 SP 가서로통신하기위해서는상대방의메타데이터정보를저장하고있어야한다. http://[ 서버주소 ]/simplesaml 에접속해 Federation 탭을선택하면자신의메타데이터정보를확인할수있다.
IdP 와연계되는상대 SP 의 SAML 소프트웨어가 simplesamlphp 일경우 php 문법의 flat 포맷을이용한다. 상대 SP 가 Shibboleth 를이용할경우 XML 포맷을이용한다. 아래그림과같은 flat 포맷의메타데이터값을상대 SP 와교환해야 IdP-SP 간통신이가능하다.
제 4 장 ID 제공자와사용자 DB 의연동 지금부터 Ubuntu 대신 CentOS 기준으로설명한다. Ubuntu 환경에서도유사한방법으로환경설정이가능하다. 4.1 절 MySQL 사용자 DB 이구성 연동방법을설명하기위해 MySQL 데이터베이스에사용자계정을생성한다. SQL 기반의사용자데이터베이스가존재할경우본절은생략가능하다. MySQL 에로그인한후데이터베이스와테이블을생성한다. 4.2 절 ID 제공자에사용자 DB( 인증소스 ) 등록 authsources.php 를다음과같이수정한다. 인증소스의이름을 dgist-userpass 로, 사용자 DB 의이름은 user_db_test 로가정한다. 이후사용자 ID 와비밀번호는 student/student1234 이다. 인증소스의이름의임의로수정할수있으나이름이디렉토리구조를반영할것을권장한다. ~# cd /var/simplesamlphp/config/ ~# nano authsources.php
// 아래와같이수정한다. <?php $config = array( 'dgist-userpass' => array( 'dgist:coreauth', 'dsn'=>'mysql:host=localhost;dbname=user_db_test', 'username'=>'[mysql 사용자 ID]', 'password' =>'[MySQL 사용자비밀번호 '], ), saml20-idp-hosted.php 파일을수정한다. ~# cd /var/simplesamlphp/metadata/ ~# nano saml20-idp-hosted.php // 다음부분을찾아수정한다. /* * Authentication source to use. Must be one that is configured in *'config/authsources.php'. */ 'auth' => 'dgist-userpass', 'userid.attribute' => 'uid', Authentication sources 가등록되었으므로 dgist:coreauth 라는이름으로인증모듈을구현한다. 4.3 절 dgist:coreauth 모듈의생성 simplesamlphp 에서모듈의이름은디렉토리구조를반영한다. 따라서 CoreAuth 모듈은 dgist 디렉토리밑에존재하게된다. CentOS 에서 IdP 와 MySQL 데이터베이스를연동시키기위해서 PDO(PHP Data Objects) 모듈을설치해야한다. ~# yum install php-mysql 또는 yum install -enablerep mysql ~# service httpd restart ~# cd /var/simplesamlphp/modules ~# mkdir -p./dgist/lib/auth/source
~# cd./dgist/lib/auth/source ~# touch CoreAuth.php // dgist 모듈을활성화시킨다. ~# cd /var/simplesamlphp/modules/dgist/ ~# touch default-enable CoreAuth.php 파일을수정한다. ~# cd /var/simplesamlphp/modules/dgist/lib/auth/source ~# nano CoreAuth.php <?php class sspmod_dgist_auth_source_coreauth extends sspmod_core_auth_userpassbase { private $dsn; private $username; private $password; public function construct($info, $config) { parent:: construct($info, $config); if(!is_string($config['dsn'])) { } throw new Exception('Error'); $this->dsn = $config['dsn']; If(!is_string[$config['username']]) { throw new Exception('Error'); } $this->username = $config['username']; If(!is_string($config['password'])) { throw new Exception('Error'); }
$this->password = $config['password'] private function checkpassword($db_in_pw, $user_in_pw) { } return $user_in_pw === $db_in_pw; protected function login($username, $password) { "$this->password"); //$db = new PDO("mysql:host=localhost;dbname=user_db_test", "$this->username", $db = new PDO($this->dsn, $this->username, $this->password); $db->setattribute(pdo::attr_errmode, PDO::ERRMODE_EXCEPTION); /* * Ensure that we are operating with UTF-8 encoding * This command is for MySQL. Other database may need different commands. */ $db->exec("set NAMES 'utf8'"); /* * With PDO we use prepared statements. This saves us from having to escape * the username in the database query. */ $st = $db->prepare("select username, password, name, email, affi from ex_users where username = '$usernam$ if(!$st->execute()){ throw new Exception('Failed to Query database for the user'); } $row = $st->fetch(pdo::fetch_assoc); if (!$row) { /* User not found */ SimpleSAML_Logger::warning('MyAuth: Could not find user '.
var_export($username, TRUE). '.'); throw new SimpleSAML_Error_Error('WRONGUSERPASS'); } if (!$this->checkpassword($row['password'], $password)) { SimpleSAML_Logger::warning('MyAuth: Could not find user '. var_export($password, TRUE). '.'); throw new SimpleSAML_Error_Error('WRONGUSERPASS'); } $attributes = array( 'uid' => array($username), ); return $attributes; } }?> 4.4 절 dgist:coreauth 모듈의검증 http://[ 서버주소 ]/simplesaml 에접속해 dgist:coreauth 모듈이정상동작하는지확인한다. 정상적으로설치되었다면아래그림처럼 dgist-userpass 가존재한다. dgist-userpass 를선택하고 username 과 password 에 student/student1234 를각각입력한다. 정상적으로설치되었으면아래그림처럼사용자속성값이보인다.
제 5 장사용자속성의제어 개별 IdP 에서제공하는사용자속성은 ID 제공자기관에서결정한다. KAFE(Korean Access Federation) 에서는 8 가지속성의이용을권장하고있다. 개별속성은 RFC4519, RFC2798, RFC4524, eduperson, SCHAC 등에정의되어있다. KAFE 가정의하는속성은다음과같다. 보다자세한사항은 www.coreen.or.kr 을참조한다. 제공속성설명개인정보가능성 uid 사용자 ID( 시험서비스기간에한시적적용 ) O edupersontargetedid 서비스제공자별암호화된사용자고유번호 displayname 사용자의화면표시이름 O mail 사용자이메일주소 O edupersonaffilation organizationname schachomeorganization 사용자의기관내직무정보 사용자의소속기관명 사용자소속기관의최상위도메인이름 edupersonprincipalname 도메인내사용자 ID 정보 O edupersonscopedaffilation 도메인내사용자직무정보 5.1 절 MySQL 테이블의확장및 CoreAuth.php 수정 다음과같이데이터베이스테이블을확장한다.
다음그림처럼표시될수있도록테이블에값을추가한다. CoreAuth.php 파일을수정한다. ~# cd /var/simplesamlphp/modules/dgist/lib/auth/source ~# nano CoreAuth.php // 다음과같이수정 /* * With PDO we use prepared statements. This saves us from having to escape
* the username in the database query */ $st = $db->prepare("select username, password, name, email, affi from ux_users where username = '$username'"); // CoreAuth.php 하단의 $attributes 변수를다음과같이수정 $attributes = array( 'uid' => array($username), 'displayname' 'mail' => array($row['name']), => array($row['email']), 'edupersonaffiliation' 'organizationname' => array($row['affi']), => array('dgist'), 'schachomeorganization' => array('dgist.ac.kr'), ); 5.2 절검증 http://[ 서버주소 ]/simplesaml 에접속해속성값들이화면표시되는지확인한다. 5.3 절 edupersontargetedid 값의생성및검증 saml20-idp-hosted.php 에서 userid.attribute 이설정을확인하고 config.php 파일을수정한다. 6.2 절 oid 설정후적용해야함
~# nano /var/simplesamlphp/metadata/saml20-idp-hosted.php // 'userid.attribute' => 'uid' 로설정되어있는지확인 'authproc' => array( 60 => array( 'class' => 'core:targetedid', 'nameid' => TRUE, ), ), 'AttributeNameFormat' => 'urn:oasis:names:tc:saml:2.0:attrname-format:uri', 'attributeencodings' => array( 'urn:oid:1.3.6.1.4.1.5923.1.1.1.10' => 'raw', /* edupersontargetedid with oid NameFormat. */ ), 수정이완료되었다면웹브라우져를이용해 simplesamlphp 에접근한후사용자로그인을수행한다. [ 주의 ] IdP 서버에서로그인했을경우에는 edupersontargetedid 속성값이화면표시되지않는다. SP 와 ID 연계한후, SP 서버에서로그인했을경우속성값이아래와같이출력된다. 5.4 절 Consent 모듈의활성화및검증 Consent 모듈은속성정보를서비스제공자에게전달하기전에사용자동의를구하는기능을갖는다. 개인정보보호법제 17 조 ( 개인정보의제공 ) 에의하면제 3 자에게개인정보를제공할경우에는해당사용자의동의가반드시필요하다. //Consent 모듈을활성화
~# cd /var/simplesamlphp/modules/consent ~# touch enable //config.php 파일의수정 ~# cd /var/simplesamlphp/config ~# nano config.php // 90 번배열의주석제거 90 => array( 'class' 'store' 'focus' => 'consent:consent', => 'consent:cookie', => 'yes', 'checked' => TRUE ), [ 주의 ] IdP 서버에서로그인했을경우에는 Consent 화면이보이지않는다. SP 와 ID 연계한후, SP 서버에서로그인했을경우아래와같이 Consent 화면이출력된다.
제 6 장메타데이터의설정 6.1 절제공기관관련정보의설정 IdP 의메타데이터에제공기관관련정보를설정한다. 제공해야할정보는 3 가지이다. ~# cd /var/simplesamlphp/metadata ~# nano saml20-idp-hosted.php OrganizationName => array( en => [my school], ), OrganziationDisplayName => array( en => [my school], ), OrganizationURL => array( en => [https://my.school.ac.kr/], ), 6.2 절 oid 설정 KAFE 에서는사용자속성이름의 naming 방식으로 oid 포맷을권장한다. 다음과같이 ID 제공자의메타데이터를수정해 oid 포맷을지원할수있도록설정한다. ~# cd /var/simplesamlphp/metadata ~# nano saml20-idp-hosted.php 'attributes.nameformat' => 'urn:oasis:names:tc:saml:2.0:attrname-format:uri', 'authproc' => array(... 100 => array( 'class' => 'core:attributemap', 'name2oid', ),... ),
제 7 장사용자인터페이스 (Theme) 의변경 7.1 절새로운 Theme 의생성 Theme 은로그인용팝업화면의 GUI(Graphical User Interface) 이다. Theme 생성을위해다음과같이디렉토리를생성하고파일을복사한다. ~# cd /var/simplesamlphp/modules/dgist ~# mkdir p./themes/www/dgistidp/default/includes ~# cd /var/simplesamlphp/modules/dgist/themes/www/dgistidp/default/includes ~# cp /var/simplesamlphp/templates/includes/*.php./ ~# cd /var/simplesamlphp/modules/dgist/themes/www/dgistidp/ ~# mkdir core ~# cd./core ~# cp /var/simplesamlphp/modules/themefeidernd/themes/feidernd/core/loginuserpass.php./ config.php 파일을수정한다. ~# cd /var/simplesamlphp/config ~# nano config.php // theme.use 를다음과같이수정 theme.use => dgist:dgistidp, // 참조 ; 디렉토리이름과동일해야함 (/var/simplesamlphp/modules/dgist/themes/dgistidp/core 스타일파일 (.css) 을복사하고 loginuserpass.php 파일을수정한다. ~# cd /var/simplesamlphp/modules/dgist/www ~# cp /var/simplesamlphp/modules/themefeidernd/www/feidernd.css./ ~# cd /var/simplesamlphp/modules/dgist/themes/dgistidp/core ~# nano loginuserpass.php // themefeidernd/feidernd.css 를 dgist/feidernd.css 로변경한다. <?php echo simplesaml_module::getmoduleurl( dgist/feidernd.css );?> 로고파일을복사하고 loginuserpass.php 파일을수정한다. ~# cd /var/simplesamlphp/modules/dgist/www ~# cp /var/simplesamlphp/modules/themefeidernd/www/ssplogo-fish-only-s.png./
~# cd /var/simplesamlphp/modules/dgist/themes/dgistidp/core ~# nano loginuserpass.php // themefeidernd/ssplogo-fish-only-s.png 를 dgist/ssplogo-fish-only-s.png 로변경한다. <?php echo simplesaml_module::getmoduleurl( dgist/ssplogo-fish-only-s.png );?> 7.2 절새로운 Theme 의검증 http://[ 서버주소 ]/simplesaml 에 접속해 Test authentication sources 화면의 dgist-userpass 를 선택한다. theme 이정상적으로적용되었으면아래와같은화면이출력된다. 7.3 절 KREONET IdP 용으로 Theme 변경하기 다음과같은 KREONET IdP 용 GUI 로 Theme 을변경할수있다.
Theme 변경을위해 2 개의파일 (inthremes.tar.gz, inwww.tar.gz) 이필요하다. coreen@kreonet.net 에요청해 KREONET IdP 용 Theme 을확보한다. // inwww.tar.gz 파일이 /var/simplesamlphp/www 에존재하는것으로가정한다. ~# cd /var/simplesamlphp/www/ ~# tar zxvf inwww.tar.gz // inthemes.tar.gz 파일이 /var/simplesamlphp/modules/dgist/themes에존재하는것으로가정한다. ~# cd /var/simplesamlphp/modules/dgist/themes ~# tar zxvf inthemes.tar.gz ~# mv dgistidp dgistidp_old ~# mv kreonet dgistidp loginuserpass.php 파일을수정한다. ~# cd /var/simplesamlphp/modules/dgist/themes/dgistidp/core ~# nano loginuserpass.php // 아래적색박스의내용을적절히수정한다.
http://[idp 서버주소 ]/simplesaml 에접속해 Test authentication sources 화면의 dgist-userpass 를선택한다. 정상적으로설정되었으면위와같은화면이출력된다. 변경된 Theme 은크게 1 기관 BI, 2 로그인, 3Footer 로구성된다. 개별요소의변경을원하면다음파일을찾아내용을수정한다.
1 기관 BI 이미지위치 css 파일위치 /var/simplesamlphp/www/images/korean/common/kreonet.gif /var/simplesamlphp/www/css/korean/common.css ( kreonet.gif 가위치한라인의내용편경 ) 2 로그인 3Footer /var/simplesamlphp/modules/dgist/themes/dgistidp/core/loginuserpass.php /var/simplesamlphp/www/user_layout_footer.php
제 8 장 Consent 화면의변경 KREONET IdP 용 Consent 를적용하기위해서는 inconsent.tar.gz 파일이필요하다. coreen@kreonet.net 에요청해해당파일을확보한다. // inconsent.tar.gz 파일이 /var/simplesamlphp/modules/consent 에존재하는것으로가정 ~# cd /var/simplesamlphp/modules/consent ~# mv templates templates_old ~# tar zxvf inconsent.tar.gz Consent 화면의변경여부를확인하기위해서 http://[sp 서버주소 ]/simplesaml 에접속해서로그인을수행한다. 해당 SP 는 IdP 와 ID 연계되어있어야한다. http://[idp 서버주소 ]/simplesaml 을이용하면적용된 Consent 화면이나타나지않는다. KREONET IdP 용 Consent 가정상적으로적용되면아래그림과같은화면이출력된다. 1 기관 BI 및 2Footer 의변경을위해다음표에명시된파일을수정한다. 1 기관 BI 2Footer 이미지위치 css 파일위치 /var/simplesamlphp/www/images/korean/common/login_kreonet.gif /var/simplesamlphp/www/css/korean/common.css ( login_kreonet.gif 가위치한라인의내용편경 ) /var/simplesamlphp/www/user_layout_footer.php
제 9 장보안설정 9.1 절페이지접근제어 simplesamlphp 를설치하면일반사용자가웹브라우저를통해 IdP 또는 SP 의 metadata, phpinfo 등보안정보에접근할가능성이있다. simplesamlphp 를설치한후해당정보들을은닉하기위해 config.php 파일을수정해야한다. default themes 의 userloginpass.php 파일을수정해사용자인터페이스를변경할수있다. ~# clear ~# cd /var/simplesamlphp/config/config.php // 아래와같이 protectindexpage 와 protectmetadata 값을 true 로변경한다. 'admin.protectindexpage' => true, 'admin.protectmetadata' => true, SSP 의관리자페이지노출취약점을해결하기위해 apache 설정을변경해줘야한다. CentOS 6.5 기준으로 IdP 가 SSL 이적용되어있을때다음과같이설정한다. ~# clear ~# cd /etc/httpd/conf.d ~# nano ssl.conf //</VirtualHost> 앞에다음과같이추가한다. 설치환경에맞게적절히수정되어야한다. ReWriteEngine On RewriteCond %{REQUEST_URI} ^/simplesaml/module.php/core/loginuserpass.php [NC] RewriteCond %{QUERY_STRING} ^AuthState=(.*)as_login(.*)AuthId(.*)admin(.*) [NC] // 접속가능한 IP 의주소를설정한다 ( 아래예 ; 192.168.0.*) RewriteCond %{REMOTE_ADDR}!^192\.168\.0\.[0-9] + RewriteCond ^ - [F] 9.2 절 SSP 의보안강화사항 showerrors 항목을 false 로해서오류가발생했을때노출되지않아야할오류정보 (stacktrace 는시스템정보를노출함 ) 가사이트에노출되는것을방지한다. 또한, admin 비밀번호를설정해 SSP 의정보가노출되지않도록한다.
~# nano /var/simplesamlphp/config/config.php //5.1과동일 'admin.protectindexpage => true, // 추가또는수정 showerrors => false, 쿠키보안을위해, 평문연결 (plain text connection, Non-TLS) 일때쿠키정보가전송되는것을막고자바스크립트가쿠키에접근하는것을막아야한다. TLS(https connection) 를반드시이용해야한다. 쿠키보안설정을하지않으면 Cross Site Scripting 공격에취약할수있다. ~# nano /var/simplesamlphp/config/config.php // 다음과같이수정 'session.cookie.secure => true, session.phpsession.httponly => true, SSP 가 redirect 를할도메인이름을설정한다. 다음과같이 empty array 로설정하면 SSP 가자동으로신뢰하는도메인으로만 redirect 한다. ~# nano /var/simplesamlphp/config/config.php // 다음과같이수정 trusted.url.domains => array(), SHA1( 보안취약 ) 대신 SHA-256 으로이용한다. ID 제공자는 saml20-idp-hosted.php 를, SP 제공자는 authsources.php 를수정한다. SSP 1.12 이상의버전에서는 config 파일에반영되어있으므로주석표시만제거한다. // ID 제공자일경우에해당 ~# nano /var/simplesamlphp/metadata/saml20-idp-hosted.php // 다음과같이주석제거 'signature.algorithm' => 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256',
제 10 장기타설정 10.1 절 Metadata 의 EntityID 변경 KAFE 회원기관은 EntityID 를다음과같은방법으로설정해야한다. IdP 또는 SP 의 URL 이 https://z.ac.kr 이며 SAML 소프트웨어로 simplesamlphp 를이용한다고가정한다. ID 제공자 : https://z.ac.kr/idp/simplesamlphp 서비스제공자 : https://z.ac.kr/sp/simplesamlphp ~# cd /var/simplesamlphp/metadata ~# nano saml20-idp-hosted.php // 아래적색박스부분에 EntityID 를기록한다. 10.2 절기타 Single Logout 메타데이터의수정 metadata/saml20-idp-hosted.php logouttype => iframe 레이아웃수정 simplesamlphp/modules/core/templates/logout-iframe.php [ 최근갱신 : 2015-11-6 draft v0.15]