【SAML認証】SimpleSAMLphpを試す(インストール編)

ネコニウム研究所

PCを利用したモノづくりに関連する情報や超個人的なナレッジを掲載するブログ

【SAML認証】SimpleSAMLphpを試す(インストール編)

2023-12-8 | , ,

SAML、SSO、うう頭が!SAML認証を試すべくSimpleSAMLphpを動かしみたい!

概要

今回の記事では、SAML認証を試すべくSimpleSAMLphpをインストールして、管理画面を表示するまでの手順を掲載する。

別の記事で、Google WorkspaceとMicrosoft EntraをIDPとしてSAML認証する予定なので、SimpleSAMLphpをSPとしてか動作させる設定も掲載する。

仕様書

環境

  • Ubuntu 20.04.4 LTS
  • Apache 2.4.41
  • PHP 8.0.30
  • SimpleSAMLphp 2.1.1

手順書

SimpleSAMLphpをUbuntuにインストールして動作を確認するまでの手順を「インストール編」と「SP設定編」の2部構成で掲載する。

インストール編

  1. SimpleSAMLphpの動作に必要なPHPのモジュールをインストールする。
    sudo apt install php-intl php-json php-xml php-mbstring php-curl
  2. SimpleSAMLphpをダウンロードして、任意の場所に配置する。この記事ではドキュメントルート内のvar/www/simplesamlphpに配置したとして話を続ける。

    私はtar.gzをダウンロードして展開した後にアップロードしたんだけども、GitHubからpullしてもいい。
  3. Apacheの設定ファイルを下記のような感じに修正する。

    <IfModule mod_ssl.c>
    <VirtualHost *:443>
    ...
    
    SetEnv SIMPLESAMLPHP_CONFIG_DIR /var/www/simplesamlphp/config
    <Directory /var/www/simplesamlphp/public>
        Require all granted
    </Directory>
    </VirtualHost>
    </IfModule>

    この設定だとSimpleSAMLphpのURLはexample.com/simplesamlphp/publicみたいな感じになる。example.com/simplesamlようにエイリアスしたい場合は下記のようにする。

    <IfModule mod_ssl.c>
    <VirtualHost *:443>
    ...
    
    SetEnv SIMPLESAMLPHP_CONFIG_DIR /var/www/simplesamlphp/config
    Alias /simplesaml /var/www/simplesamlphp/public
    <Directory /var/www/simplesamlphp/public>
        Require all granted
    </Directory>
    </VirtualHost>
    </IfModule>
  4. ここからSimpleSAMLphpの設定ファイルを編集する。/var/www/simplesamlphp/config.php.distをコピーして/var/www/simplesamlphp/config.phpを作る。
    34行付近の'baseurlpath'を下記のような感じに修正する。

    'baseurlpath' => 'https://example.com/simplesamlphp/public/',

    エイリアスを使ってる場合は

    'baseurlpath' => 'https://example.com/simplesaml/',
  5. 175行付近の'timezone'をAsia/Tokyoにする。設定できるタイムゾーンはこのページを参照。
    'timezone' => 'Asia/Tokyo',
  6. 190行付近のsecretsaltにソルトになるランダムな文字列を入力する。
    'secretsalt' => 'xxxxxxxxxxxxxxxxxxxxxx',

    設定ファイルのコメントにあるんだけども、下記のコマンドでランダムな文字列を出力できる。

    LC_ALL=C tr -c -d '0123456789abcdefghijklmnopqrstuvwxyz' </dev/urandom | dd bs=32 count=1 2>/dev/null;echo
  7. 198行付近の'auth.adminpassword'に管理画面に入るときに使うパスワードを設定する。
    'auth.adminpassword' => 'dnk087elmc7riohmp954xddd1fo4ku6p',

    /var/www/simplesamlphp/config.phpの設定は以上。

  8. ApacheがSimpleSAMLphpをインストールしたパスにアクセスできるようにする。
    chown -R www-data:www-data /var/www/simplesamlphp/
  9. Apacheを再起動する。
    sudo systemctl restart apache2
  10. ここまでの設定でSimpleSAMLphpにブラウザでアクセスできるようになった。トップページはhttps://example.com/simplesamlphp/public/、管理画面はhttps://example.com/simplesamlphp/public/module.php/adminのような感じでアクセスできる。

トップページはこんな感じで

管理画面はこんな感じ。

config.phpauth.adminpasswordで設定したパスワードでログインすると

SimpleSAMLphpの状態が表示される。

Your PHP installationのセクションでPHPで必要な拡張機能がインストールされてるか確認できる。requiredとなってる項目は必須なのでもしインストールされない項目があったらインストールしておく。

SP設定編

  1. 別の記事でSimpleSAMLphpをSPとして使う内容を掲載する予定なのでSP用の証明書を作っておく。
    cd /var/www/simplesamlphp/cert/
    sudo openssl req -newkey rsa:3072 -new -x509 -days 3652 -nodes -out server.crt -keyout server.pem -subj "/CN=sp.local"

    /var/www/simplesamlphp/cert/の中にserver.pemserver.crtが作られてればOKだ!

  2. /var/www/simplesamlphp/authsources.php.distをコピーして/var/www/simplesamlphp/authsources.phpを作る。
    26行付近のdefault-spを下記のような感じに修正する。

    'default-sp' => [
    'saml:SP',
    'privatekey' => 'server.pem',
    'certificate' => 'server.crt',
    // The entity ID of this SP.
    'entityID' => 'https://example.com/simplesamlphp/public/',
    
    ...
    ],

    'entityID'の値を例ではURLにしてるんだけども、ユニークな文字列であればURL形式でなくとも何でもいい。

まとめ(感想文)

次回?Google WorkspaceとMicrosoft EntraをIDPにしてSAML認証してみる記事を掲載するのでしばし待たれよ!