CentOS 8でSimpleSAMLphpを使ったSAML SPを作ってみよう!
schedule 2020/02/25 refresh 2023/11/09
目的
CentOS 8上にSimpleSAMLphpを使ってSAML SPを構築する。
はじめに
RHEL8がリリースされてもうすぐ1年です。皆さんRHEL8に触る機会が増えてきているのではないでしょうか。
RHEL8ではいくつかの大きな変更が入っており、今まで慣れ親しんだyumだdnf(ダンディファイド ヤム)に変わったりもしました。
しかし弊社技術者として最も大きな変更はOpenLDAP Serverが同梱されなくなり Red Hat Directory Server が標準Directoryサーバーに変わったことです。
このトピックも今後ブログで書いていきたいと思います。
今回はCentOS 8上にSimpleSAMLphpを使って SAML SPを作ってみたいと思います。
前提
・CentOS 8.1のインストールと初期構築が完了していること
・SeciossLinkへテナント構築が完了していること(評価版でもOK)
※ 本稿では使用する SeciossLink のテナントは example.com です。
・SimpleSAMLphpはバージョン 1.18.4 を使用します。
・SAML SPのホスト名は samltest8.int.secioss.work としています。
構築手順
1. 環境設定
SimpleSAMLphp を動作させるのに必要なパッケージをインストールします。
| # dnf install httpd | 
2. SimpleSAMLphpのインストール
SimpleSAMLphpのホームページからパッケージをダウンロードしてインストールします。
| # curl -o simplesamlphp.tgz -L https://simplesamlphp.org/download?latest | 
3. SimpleSAMLphpの初期設定
SimpleSAMLphpの管理者ユーザーのパスワードを設定します。
auth.adminpassword を変更して任意のパスワードに変更してください。
enable.saml20-idp を変更してSAML2を有効化します。
| # vi /var/www/simplesamlphp/config/config.php | 
|     'auth.adminpassword' => '123', | 
httpdにSimpleSAMLphp用の設定ファイルを追加します。
| # vi /etc/httpd/conf.d/simplesamlphp.conf | 
| Alias /simplesaml /var/www/simplesamlphp/www | 
httpdを起動します。
| # systemctl start httpd | 
ファイアーウォールでhttpsアクセスが許可されていない場合は許可してください。
| firewall-cmd --permanent --zone=public --add-service=https | 
RHEL8になってファイアーウォールの実装がiptablesからnftablesに変わりましたが、firewalld のバックエンドとして動いているので設定方法は今まで通りです。
動作確認をしてみましょう。
正しく設定できていれば以下のような画面が表示されます。
https://samltest8.int.secioss.work/simplesaml/

4. SeciossLinkの設定
SeciossLinkの管理画面にログインし、SAML SPの新規登録を行います。

| 項目名 | 設定値 | 
| サービスID | simplesaml8 ※任意の値でOK | 
| サービス名 | simplesaml8 ※任意の値でOK | 
| エンティティID | https://samltest8.int.secioss.work/simplesaml/ ※SAML SPのエンティティIDです。任意の値でOK。後で使います。 | 
| Assertion Consumer Service | https://samltest8.int.secioss.work/simplesaml/module.php/saml/sp/saml2-acs.php/slink-sp ※URL最後の slink-sp は任意の値でPLですが、後で使います。 | 
| ログアウトURL | https://samltest8.int.secioss.work/simplesaml/module.php/saml/sp/saml2-logout.php/slink-sp ※RL最後の slink-sp は >Assertion Consumer Service で指定したものと同じものを指定してください。 | 
| デフォルトRelayState | ※IdP-Initiatedで認証した場合にリダイレクトするURLです。今回はSP-Initiatedなので空白を指定します。 | 
| アクセス先URL | https://samltest8.int.secioss.work/ ※テスト用のサンプルページのURLを設定する。 | 
| IDの属性 | urn:oasis:names:tc:SAML:2.0:nameid-format:persistent ※変更なし | 
登録したSAML SPをユーザーに割り当てます。

5. SimpleSAMLphpにSAML IdP追加
SimpleSAMLphpにSAML IdPを追加します。
まず、SeciossLinkのメタデータをダウンロードします。
ブラウザなどで 下記URLにアクセスし、メタデータファイルをダウンロードしてください。
https://slink.secioss.com/saml/metadata.php?tenant=example.com
※最後のexample.comはテナントIDです。
SimpleSAMLphpの管理画面にログインし、SAMLメタデータの変換を行います。
ツールの「XML を SimpleSAMLphpメタデータに変換」をクリックします。

先ほどダウンロードしたSeciossLinkのメタデータをアップロードし、メタデータの変換を行います。

変換されたメタデータの内容を貼り付けます。
| # vi /var/www/simplesamlphp/metadata/saml20-idp-remote.php | 
| $metadata['https://slink.secioss.com/example.com'] = array ( | 
SAML IdPの設定を追加します。
| # vi /var/www/simplesamlphp/config/authsources.php | 
|    'slink-sp' => array( | 
※"slink-sp" は 「Assertion Consumer Service」 で設定したURLの最後の部分です。
※"https://samltest8.int.secioss.work/simplesaml/" は「エンティティID」で設定した値を設定してください。
※"example.com" はテナントIDを指定してください。
6. 動作確認
テスト用ページの作成します。
| # vi /var/www/html/index.php | 
| <?php | 
ブラウザで下記URLにアクセスするとこんな感じに表示されます。
https://samltest8.int.secioss.work/

このようにCentOS 8でもSimpleSAMLphpを使って簡単にSAML対応のWebサイトを構築できます。
それではまた。
