hirosanote’s blog

検証環境の構築手順やネットワーク機器のテスト結果、関連する事について記載します。このブログは個人で行っており、所属する会社とは関係ありません。

SAMLテスト環境の構築手順

SimpleSAMLphpを使用し、SAMLのテスト環境をローカルに構築する手順を記載します。以下のページを参考にしました。
https://siblog.seiwatec.co.jp/?p=344

このブログでは、このページを見ればインストールが成功し、動作確認できることを目指しています。SimpleSAMLphpをインストールするための準備および各設定も大変でしたので、手順を記載します。

SAMLについてほんの少しだけ解説を加えます。

SAML : Security Assertion Markup Language サムルと読む。

IDP : Identify Provider 認証情報を提供
SP : Service Provider 認証情報を利用


環境
Linux CentOS7.5
インストールメディア : CentOS-7-x86_64-Minimal-1804.iso
CentOS7.5の場合は、予めOpenSSLがインストールされているため、このバージョンを使用します。

IDP ip address : 192.168.0.104
SP ip address : 192.168.0.105


1. 各設定及び、必要なモジュールのインストール
IDP, SPの両方に以下を行います。

テスト環境のため、トラブルを少なくするためにSELINUXFireWallを無効にします。

vi /etc/selinux/config
SELINUX=disabled <-- 変更
systemctl disable firewalld
systemctl stop firewalld


Apacheをインストールします。

yum -y install httpd-devel
yum -y install mod_ssl


PHPをインストールします。

yum -y install php
yum -y install php-devel
yum -y install php-pdo
yum -y install php-mysqlnd
yum -y install php-mbstring
yum -y install php-gd
yum -y install php-pear


Apacheを起動します。

systemctl start httpd
systemctl enable httpd


ブラウザから、HTTPSにて接続しページが表示されることを確認します。

https://192.168.0.104
https://192.168.0.105


SimpleSAMLphpのインストール
以下のURLより、最新のモジュールをダウンロードします。
https://simplesamlphp.org/download

winscp等で、/varへダウンロードしたファイルをアップロードします。

アップロードしたファイルを/var/simplesamlphp に展開します。

cd /var
tar xzf simplesamlphp-1.16.1.tar.gz
mv simplesamlphp-1.16.1 simplesamlphp
chmod 755 /var/simplesamlphp/www


Apacheのhttp.confの一番最後に、以下を追加します。

cd /etc/httpd/conf
vi httpd.conf

Alias /simplesaml /var/simplesamlphp/www
<Directory "/var/simplesamlphp/www">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>


サービスを再起動します。

service httpd restart


設定画面へアクセス出来ることを確認します。
https://saml.server.ip.address/simplesaml/
f:id:hirosanote:20180915150737p:plain



IDPの設定
IDPのインスタンス 192.168.0.104にSSHでログインします。

config.phpの各設定を行います。

vi /var/simplesamlphp/config/config.php


adminユーザーのパスワードを変更します。変更しないと、ログインできません。

'auth.adminpassword' => '123456',


IDPモジュールを有効化します。

'enable.saml20-idp' => true,
'enable.shib13-idp' => true,

config.phpを保存して閉じます。


サンプルユーザーを作成します。

touch /var/simplesamlphp/modules/exampleauth/enable
cd /var/simplesamlphp/config/
vi authsources.php
ファイルの一番最後にある「);」を削除します。

f:id:hirosanote:20180916164702p:plain
以下を追加します。

'example-userpass' => array(
    'exampleauth:UserPass',
    'user1:test1' => array(
        'uid' => array('user1'),
        'eduPersonAffiliation' => array('member', 'developer'),
    ),
    'user2:test2' => array(
        'uid' => array('user2'),
        'eduPersonAffiliation' => array('member', 'admin'),
    ),
 ),

);


自己証明書を作成します。

cd /var/simplesamlphp/cert
openssl req -newkey rsa:2048 -new -x509 -days 3652 -nodes -out server.crt -keyout server.pem

Generating a 2048 bit RSA private key
..............................................................................................+++
.............+++
writing new private key to 'server.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:testidp
Locality Name (eg, city) [Default City]:testidp
Organization Name (eg, company) [Default Company Ltd]:testidp
Organizational Unit Name (eg, section) []:testidp
Common Name (eg, your name or your server's hostname) []:testidp
Email Address []:


生成した証明書とキーファイル名が、指定されていることを確認します。

vi /var/simplesamlphp/metadata/saml20-idp-hosted.php
'privatekey' => 'server.pem',
'certificate' => 'server.crt',

vi /var/simplesamlphp/metadata/shib13-idp-hosted.php
'privatekey' => 'server.pem',
'certificate' => 'server.crt',


SPの設定
SPのインスタンス 192.168.0.105にSSHでログインします。

config.phpの各設定を行います。

vi /var/simplesamlphp/config/config.php


adminユーザーのパスワードを変更します。変更しないと、ログインできません。

'auth.adminpassword' => '123456',


自己証明書を作成します。

cd /var/simplesamlphp/cert
openssl req -newkey rsa:2048 -new -x509 -days 3652 -nodes -out server.crt -keyout server.pem
Generating a 2048 bit RSA private key
....................+++
............................................+++
writing new private key to 'server.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:testsp
Locality Name (eg, city) [Default City]:testsp
Organization Name (eg, company) [Default Company Ltd]:testsp
Organizational Unit Name (eg, section) []:testsp
Common Name (eg, your name or your server's hostname) []:testsp
Email Address []:


生成した証明書とキーファイル名が、指定されていることを確認します。

vi /var/simplesamlphp/metadata/saml20-idp-hosted.php
'privatekey' => 'server.pem',
'certificate' => 'server.crt',

vi /var/simplesamlphp/metadata/shib13-idp-hosted.php
'privatekey' => 'server.pem',
'certificate' => 'server.crt',


IDPを指定します。

vi /var/simplesamlphp/config/authsources.php

以下の箇所に追加します。
f:id:hirosanote:20180916183823p:plain

 'idp' => 'https://192.168.0.104/simplesaml/shib13/idp/metadata.php',

f:id:hirosanote:20180917180145p:plain



IDPメタデータの設定
IDPにSPのメタデータを登録します。

SP側の設定ページを開きます。
https://192.168.0.105/simplesaml

[連携] -> [SAML 2.0 SPメタデータ] -> [メタデータの表示]をクリックします。
f:id:hirosanote:20180917161602p:plain


表示されたメタデータクリップボードにコピーします。
f:id:hirosanote:20180917162056p:plain


IDP側の設定ページを開きます。
https://192.168.0.104/simplesaml


管理者でログインします。

[連携] -> [ツール] -> [XML を SimpleSAMLphpメタデータに変換]をクリックします。
f:id:hirosanote:20180917181545p:plain


クリップボードにコピーしたSPのXMLデータをペーストします。
ペースト後、[パース]をクリックします。
f:id:hirosanote:20180917163951p:plain


変換されたメタデータshib13-sp-remoteをクリップボードにコピーします。
f:id:hirosanote:20180917164434p:plain


IDP側の以下のファイルの一番最後にペーストします。

vi /var/simplesamlphp/metadata/shib13-sp-remote.php


変換されたメタデータsaml20-sp-remoteをクリップボードへコピーします。
f:id:hirosanote:20180917165055p:plain


IDP側の以下のファイルの一番最後にペーストします。

vi /var/simplesamlphp/metadata/saml20-sp-remote.php


連携タブより、設定が正しく表示されていることを確認します。
f:id:hirosanote:20180917182548p:plain



SPメタデータの設定
SPにIDPのメタデータを登録します。

IDP側の設定ページを開きます。
https://192.168.0.104/simplesaml


[連携] -> [SAML 2.0 IdPメタデータ] -> [メタデータの表示]をクリックします。
f:id:hirosanote:20180917183322p:plain


メタデータ SAML 2.0 用のメタデータXMLフォーマットをクリップボードにコピーします。
f:id:hirosanote:20180917190711p:plain


SP側の設定ページを開きます。
https://192.168.0.105/simplesaml

管理者でログインします。


[連携] -> [ XML を SimpleSAMLphpメタデータに変換]をクリックします。
f:id:hirosanote:20180917191004p:plain


IDPのメタデータをペーストし[パース]をクリックします。
f:id:hirosanote:20180917191243p:plain


変換されたメタデータsaml20-idp-remoteをクリップボードにコピーします。
f:id:hirosanote:20180917191715p:plain


SP側192.168.0.105にSSHでログインします。
以下のファイルの一番最後に変換されたメタデータsaml20-idp-remoteをペーストします。

vi /var/simplesamlphp/metadata/saml20-idp-remote.php


IDP側の設定ページを開きます。
https://192.168.0.104/simplesaml


[連携] -> [Shib 1.3 IdPメタデータ] -> [メタデータの表示]をクリックします。
f:id:hirosanote:20180917193306p:plain


メタデータ Shib 1.3 IdP 用のメタデータXMLフォーマットをクリップボードにコピーします。
f:id:hirosanote:20180917195829p:plain


SP側の設定ページを開きます。
https://192.168.0.105/simplesaml

管理者でログインします。


[連携] -> [ XML を SimpleSAMLphpメタデータに変換]をクリックします。

IDPのメタデータをペーストし[パース]をクリックします。

変換されたメタデータshib13-idp-remoteをクリップボードにコピーします。

SP側192.168.0.105にSSHでログインします。
以下のファイルの一番最後に変換されたメタデータshib13-idp-remoteをペーストします。

vi /var/simplesamlphp/metadata/shib13-idp-remote.php


連携タブより、設定が正しく表示されていることを確認します。
f:id:hirosanote:20180917200621p:plain



動作テスト
SP側の設定ページを開きます。
https://192.168.0.105/simplesaml/


[認証] -> [ 設定されている認証元をテスト] をクリックします。
f:id:hirosanote:20180917201243p:plain


default-spをクリックします。
f:id:hirosanote:20180917201404p:plain


[選択]をクリックします。
f:id:hirosanote:20180917201630p:plain


IDPの192.168.0.104へリダイレクトされたことを確認します。テストアカウントを入力し、[ログイン]をクリックします。
ユーザ名 : user1
パスワード : test1
f:id:hirosanote:20180917202307p:plain


ログインの結果が表示されれば、OKです。
f:id:hirosanote:20180917202432p:plain