13
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SimpleSAMLphp環境構築メモ

Last updated at Posted at 2017-11-24

前提条件

  • CentOS7 7.4.1708(最小構成インストール)
  • HTTP ServerはApache HTTP Serverを利用
  • https接続はmod_sslを利用

OS初期設定

1.インターフェース名確認

# ip addr

2.IP設定およびホスト名、DNS設定

# nmcli con mod [i/f名] ipv4.method manual
# nmcli con mod [i/f名] ipv4.addresses "192.168.xx.xx/24"
# nmcli con mod [i/f名] ipv4.gateway "192.168.xx.xx"
# nmcli con mod [i/f名] ipv4.dns "192.168.xx.xx"
# nmcli general hostname
localhost.localdomain
# nmcli general hostname sp.local
# systemctl restart systemd-hostnamed
# hostname
sp.local

3.ネットワーク自動起動設定

# nmcli con mod [i/f名] connection.autoconnect yes

4.監査機能およびファイヤーウォールの停止

# systemctl stop firewalld
# systemctl disable firewalld

# systemctl stop auditd
# systemctl disable auditd

5.SELinuxの無効化

# vi /etc/selinux/config
/etc/selinux/config
#SELINUX=enforcing
SELINUX=disabled

6.ロケール変更

localectl set-locale LANG=ja_JP.utf8

7.時刻同期

ntpdate -b ntp.nict.jp
※定期同期したい場合はcronに登録

8.OS再起動

# reboot

Apache HTTP Server インストール

1.yumで導入

# yum install -y httpd

2.httpdの起動

# systemctl start httpd

3.httpdの自動起動設定

# systemctl enable httpd

4.稼働確認
デフォルトページが表示されればOK

http://sp.local/

PHP インストール

1.php導入

# yum install -y php

2.php拡張機能導入

# yum install -y php-mbstring
# vi /etc/php.ini
php.ini
;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
extention=mbstring.so  #追記 
# yum install -y php-xml

3.httpd再起動

systemctl restart httpd

4.稼働確認用phpファイル作成

cd /var/www/html
vi phpinfo.php
phpinfo.php
<?php
   phpinfo();
?>

5.稼働確認
http://sp.local/phpinfo.php

バージョン情報が表示されればOK
テキスト文字がそのまま表示された場合はNG

SimpleSAMLphp導入

1.ダウンロード

curl -OL https://github.com/simplesamlphp/simplesamlphp/releases/download/v1.15.0/simplesamlphp-1.15.0.tar.gz

※バージョン1.15.0をダウンロードする場合

2.展開とファイルの移動

# tar xvf simplesamlphp-1.15.0.tar.gz
# mv simplesamlphp-1.15.0 /var/www/simplesaml

※/var/www/simplesamlをホームとする場合

#HTTP over TLS設定
1.mod_sslインストール

# yum install mod_ssl

mod_ssl-2.4.6-67.el7.centos.6.x86_64

2.秘密鍵作成(keyファイル)

# cd /etc/pki/tls/private/
# openssl genrsa -aes128 1024 > server.key

Generating RSA private key, 1024 bit long modulus
..................++++++
..........................................++++++
e is 65537 (0x10001)
Enter pass phrase:(パスフレーズ)
Verifying - Enter pass phrase:(同じパスフレーズ)

3.証明書署名要求ファイル作成(CSRファイル)

# cd /etc/pki/tls/private/
# openssl req -new -key server.key > server.csr

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) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Hoge
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Hoge Ltd
Organizational Unit Name (eg, section) []:Hoge
Common Name (eg, YOUR name) []:sp.local
Email Address []:空白

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:空白
An optional company name []:空白

4.自己証明書ファイル作成(CRTファイル)

# cd /etc/pki/tls/private/
# openssl x509 -in server.csr -days 36500 -req -signkey server.key > /etc/pki/tls/private/server.crt

Signature ok
subject=/C=JP/ST=Tokyo/L=Hoge/O=Hoge Ltd/OU=Hoge/CN=sp.local
Getting Private key
Enter pass phrase for server.key:(上記で指定したパスフレーズ)

5.起動時パスフレーズ入力解除

# mv server.key server.key.bak
# openssl rsa -in server.key.bak > server.key

Enter pass phrase for server.key.back:(パスフレーズ)
writing RSA key

6.ssl.conf設定

# vi /etc/httpd/conf.d/ssl.conf
ssl.conf

Listen 443 https

SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
SSLSessionCache         shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout  300
SSLRandomSeed startup file:/dev/urandom  256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin

<VirtualHost _default_:443>
SetEnv SIMPLESAMLPHP_CONFIG_DIR /var/www/simplesaml/config     #編集
DocumentRoot "/var/www/simplesaml/www"                         #編集
Alias /simplesaml /var/www/simplesaml/www                      #編集
Alias /sample /var/www/sample/                                 #編集
ServerName sp.local:443                                        #編集
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
SSLEngine on
SSLProtocol -all +TLSv1.2                                      #編集
SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA               #編集
SSLCertificateFile /etc/pki/tls/private/server.crt             #編集
SSLCertificateKeyFile /etc/pki/tls/private/server.key          #編集

<Files ~ "\.(cgi|shtml|phtml|php3?)$">
    SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>

<Directory /var/www/simplesaml/www>                            #編集
  <IfModule mod_authz_core.c>                                  #編集
    Require all granted                                        #編集
  </IfModule>                                                  #編集
</Directory>                                                   #編集

BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

CustomLog logs/ssl_request_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

※80ポートアクセスを443リダイレクトしたい場合は下記も合わせて実施
confファイル名は何でもよい。

vi /etc/httpd/conf.d/rdct80.conf
<VirtualHost *:80>
    ServerName sp.local
    DocumentRoot /var/www/html/

    RedirectMatch 301 .* https://sp.local/simplesaml/
</VirtualHost>

7.httpd再起動

systemctl restart httpd

8.稼働確認
https://sp.local/simplesaml/

SimpleSAMLphp設定

1.adminユーザパスワード設定

vi /var/www/simplesaml/config/config.php
config.php
'auth.adminpassword' => '(任意のパスワード)',

2.secretsaltの設定
下記コマンドでランダムな文字列を生成

tr -c -d '0123456789abcdefghijklmnopqrstuvwxyz' </dev/urandom | dd bs=32 count=1 2>/dev/null;echo
vi /var/www/simplesaml/config/config.php
config.php
'secretsalt' => '(生成したランダム文字列)',

#SP構築

1.署名・暗号化用証明書作成

# cd /var/www/simplesaml
# openssl req -newkey rsa:2048 -new -x509 -days 3652 -nodes -subj "/C=JP/ST=Tokyo/CN=sp.local" -out cert/sp.local.crt -keyout cert/sp.local.pem
# ls -al /var/www/simplesaml/cert/

2.default-sp設定

vi /var/www/simplesaml/config/authsources.php
authsources.php
'default-sp' => array(
'saml:SP',
'RelayState' => 'https://sp.local/sample/start.php',
# idp認証後に遷移させたいURLがある場合

'privatekey' => 'sp.local.pem',  #追加
'certificate' => 'sp.local.crt',  #追加

#'entityID' => null, #コメントアウト
'entityID' => 'https://sp.local/', #追加

# idpのエンティティID
'idp' => 'idp_entityid',

#アサーションにNameID-format(unspecified)を強制する場合
'NameIDPolicy' => 'urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified', 

サンプル用ページ作成

mkdir /var/www/sample/
vi /var/www/sample/start.php
start.php
<?php
require_once('/var/www/simplesaml/lib/_autoload.php');
$as = new SimpleSAML_Auth_Simple('default-sp');
$as->requireAuth();
$attr=$as->getAttributes();
$name=$as->getAuthData("saml:sp:NameID");
?>
<html>
<body>
<h1>This page is ServiceProvider start page.</h1>
<h2>NameID Format</h2>
<pre><?php print_r($name) ?></pre>
<h2>Attribute</h2>
<pre><?php print_r($attr) ?></pre>
<a href="logout.php">logout</a>
</body>
</html>
vi /var/www/sample/logout.php
logout.php
<?php
require_once('/var/www/simplesaml/lib/_autoload.php');
$as = new SimpleSAML_Auth_Simple('default-sp');
$as->requireAuth();
$attributes = $as->getAttributes();
$as->logout('https://sp.local/sample/start.php');
?>

3.Idpメタデータ取り込み
・simplesamlphp管理画面->連携->XML を SimpleSAMLphpメタデータに変換
・参照ボタンから対象のIdpメタデータ(XMLファイル)をアップロード
・変換されたメタデータ(saml20-idp-remote)の内容をコピー

・saml20-idp-remote.phpにペースト
※phpソースなのでphpタグを忘れずに

vi /var/www/simplesaml/metadata/saml20-idp-remote.php
saml20-idp-remote.php
<?php
$metadata['https://test.idp.local:443/'] = array (
  'entityid' => 'https://test.idp.local:443/',
  'contacts' =>
  array (
  ),
  'metadata-set' => 'saml20-idp-remote',

<<省略>>

  ),
);
?>

#IDP側設定
IDP側で連携先のSPに関わる設定を行う。(IDPのマニュアルなど参照)

#稼働確認
・simplesamlphpの管理画面にアクセス

https://sp.local/simplesaml/
もしくは
https://sp.local/simplesaml/module.php/core/authenticate.php?as=(sp名)

・認証タブ->設定されている認証元をテスト->default-sp を選択
・連携したいIdpを選択後、選択ボタンを押下

・IdpにリダイレクトされIdpの認証画面が表示される
・Idp認証後、アサーションで連携されたユーザ属性やSAML Subjectが表示される

または、

https://sp.local/sample/start.php

以上

13
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?