0. 前提条件
マシン | IPアドレス |
---|---|
IdP CentOS 7 | 192.168.56.10 |
SP1 CentOS 7 | 192.168.56.11 |
SP2 CentOS 7 | 192.168.56.12 |
1. 事前準備【全てのサーバ】
# mv -i /etc/selinux/config /etc/selinux/config.orig
# sed 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config.orig >/etc/selinux/config
# setenforce permissive
# firewall-cmd --add-service=http --permanent
# firewall-cmd --reload
# mv -i /etc/chrony.conf /etc/chrony.conf.orig
# sed '/^server/d; 1,/^$/s/^$/server time.nist.gov iburst\
/' /etc/chrony.conf.orig >/etc/chrony.conf
# systemctl restart chronyd
SimpleSAMLphp の動作に時刻同期は必須です。pool.centos.org は不安定なため、NICT の NTP サーバを指定しています。
2. パッケージのインストールと設定【全てのサーバ】
# yum install -y --disablerepo=updates httpd php php-mbstring php-xml
# mv -i /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.orig
# cat /etc/httpd/conf/httpd.conf.orig - <<EOF >/etc/httpd/conf/httpd.conf
<IfModule mod_alias.c>
Alias /simplesaml /var/www/simplesamlphp/www
<Directory "/var/www/simplesamlphp/www">
Require all granted
</Directory>
SetEnv SIMPLESAMLPHP_CONFIG_DIR /var/www/simplesamlphp/config
</IfModule>
EOF
# mv -i /etc/php.ini /etc/php.ini.orig
# sed '/^; Dynamic Extensions ;$/,/^$/s/^$/\
extention=mbstring.so\
/' /etc/php.ini.orig >/etc/php.ini
# systemctl enable httpd
# systemctl start httpd
3. SimpleSAMLphp のダウンロードと配置【全てのサーバ】
# curl -LO https://github.com/simplesamlphp/simplesamlphp/releases/download/v1.16.3/simplesamlphp-1.16.3.tar.gz
# tar -xzf simplesamlphp-1.16.3.tar.gz
# chown -hR root:root simplesamlphp-1.16.3
# mv -i simplesamlphp-1.16.3 /var/www/simplesamlphp
本稿執筆時点で、より新しい SimpleSAMLphp 1.18.7 がリリースされていますが、CentOS 7 に同梱の PHP 5.4.X 上では SimpleSAMLphp 1.16.3 より新しいリリースは動作しません。
4. IdP の設定【IdP CentOS 7】
# cd /var/www/simplesamlphp/
# mv -i config/config.php config/config.php.orig
# sed "
s/'auth.adminpassword' => '123'/'auth.adminpassword' => 'admin1'/;
s/'secretsalt' => 'defaultsecretsalt'/'secretsalt' => '"\
`env LC_CTYPE=C tr -c -d '0123456789abcdefghijklmnopqrstuvwxyz' </dev/urandom |
dd bs=32 count=1 2>/dev/null;echo`"'/;
s/'enable.saml20-idp' => false/'enable.saml20-idp' => true/;
" config/config.php.orig >config/config.php
# mv -i config/authsources.php config/authsources.php.orig
# sed "\$i\\
'example-userpass' => array(\\
'exampleauth:UserPass',\\
'user1:pass1' => array(\\
'uid' => array('user1'),\\
'eduPersonAffiliation' => array('member', 'admin'),\\
), \\
'user2:pass2' => array(\\
'uid' => array('user2'),\\
'eduPersonAffiliation' => array('member', 'developer'),\\
),\\
),\\
" config/authsources.php.orig >config/authsources.php
# touch modules/exampleauth/enable
# openssl req -newkey rsa:2048 -new -x509 -days 3652 -nodes \
-subj /C=JP/ST=Tokyo/CN=MyIdP -out cert/server.crt -keyout cert/server.pem
- ブラウザで http://192.168.56.10/simplesaml/ にアクセスし、「認証」タブをクリックします。
- 「管理者でログイン」をクリックします。
- ユーザ名:admin、パスワード:admin1 でログインします。
- 「連携」タブをクリックします。
- 「SAML 2.0 IdPメタデータ」リージョンの「メタデータを表示」をクリックします。
- 「SAML 2.0 用のメタデータXMLフォーマット」の内容をクリップボードにコピーします。
- 左上冒頭の「SAML 2.0 IdPメタデータ」 (タイトル) をクリックし、「連携」タブをクリックします。
- 「ツール」リージョンの「XML を SimpleSAMLphpメタデータに変換」をクリックします。
- テキスト領域にクリップボードの内容を貼り付け、「パース」ボタンをクリックします。
- 「saml20-idp-remote」リージョンの内容をクリップボードにコピーします。
- SP1 の /var/www/simplesamlphp/metadata/saml20-idp-remote.php の末尾に追記します。
- SP2 の /var/www/simplesamlphp/metadata/saml20-idp-remote.php の末尾に追記します。
5. SP1 の設定【SP1 CentOS 7】
# cd /var/www/simplesamlphp/
# mv -i config/config.php config/config.php.orig
sed "
s/'auth.adminpassword' => '123'/'auth.adminpassword' => 'admin1'/;
s/'secretsalt' => 'defaultsecretsalt'/'secretsalt' => '"\
`env LC_CTYPE=C tr -c -d '0123456789abcdefghijklmnopqrstuvwxyz' </dev/urandom |
dd bs=32 count=1 2>/dev/null;echo`"'/;
" config/config.php.orig >config/config.php
- ブラウザで http://192.168.56.11/simplesaml/ にアクセスし、「連携」タブをクリックします。
- SAML 2.0 SPメタデータ」リージョンの「メタデータを表示」をクリックします。
- 「SAML 2.0 用のメタデータXMLフォーマット」の内容をクリップボードにコピーします。
- ブラウザで http://192.168.56.10/simplesaml/admin/metadata-converter.php にアクセスします。
- ログイン画面が表示された場合は、ユーザ名:admin、パスワード:admin1 でログインします。
- 「saml20-sp-remote」リージョンの内容をクリップボードにコピーします。
- IdP の /var/www/simplesamlphp/metadata/saml20-sp-remote.php の末尾に追記します。
6. SP2 の設定【SP2 CentOS 7】
# cd /var/www/simplesamlphp/
sed "
s/'auth.adminpassword' => '123'/'auth.adminpassword' => 'admin1'/;
s/'secretsalt' => 'defaultsecretsalt'/'secretsalt' => '"\
`env LC_CTYPE=C tr -c -d '0123456789abcdefghijklmnopqrstuvwxyz' </dev/urandom |
dd bs=32 count=1 2>/dev/null;echo`"'/;
" config/config.php.orig >config/config.php
- ブラウザで別のタブを開き、http://192.168.56.12/simplesaml/ にアクセスし、「連携」タブをクリックします。
- 「SAML 2.0 SPメタデータ」リージョンの「メタデータを表示」をクリックします。
- 「SAML 2.0 用のメタデータXMLフォーマット」の内容をクリップボードにコピーします。
- ブラウザで http://192.168.56.10/simplesaml/admin/metadata-converter.php にアクセスします。
- ログイン画面が表示された場合は、ユーザ名:admin、パスワード:admin1 でログインします。
- 「saml20-sp-remote」リージョンの内容をクリップボードにコピーします。
- IdP の /var/www/simplesamlphp/metadata/saml20-sp-remote.php の末尾に追記します。
7. 動作確認 (シングルサインオンによるログインとログアウト)
- ブラウザで http://192.168.56.11/simplesaml/ にアクセスし、「認証」タブをクリックします。
- 「設定されている認証元をテスト」をクリックします。
- 「default-sp」をクリックします。
- 「選択」ボタンをクリックします。
- ユーザ名:user1、パスワード:pass1 でログインします。
- ブラウザで別のタブを起動し、 http://192.168.56.12/simplesaml/ にアクセスします。
- 「認証」タブをクリックします。
- 「設定されている認証元をテスト」をクリックします。
- 「default-sp」をクリックします。
- 「選択」ボタンをクリックします。
- この時、ログイン画面が表示されず、既にログインされた状態になれば、シングルサインオンによるログインに成功です。
- 画面左下の「ログアウト」をクリックします。
- 最初のタブ (SP1 へ接続) を再読み込み (リロード) し、「選択」ボタンをクリックします。
- この時、既にログインされた状態にならず、ログイン画面が表示されれば、シングルサインオンによるログアウトに成功です。