最近仕事でSAMLの検証環境の構築をする機会があったので、その手順をまとめてみました。
SAML(Security Assertion Markup Language)とは、主にシングルサインオン等を実現するためにXMLをベースに策定された標準プロトコルです。
SAMLはアサーション、プロトコル、バインディングの3つで構成されています。アサーションとはユーザの認証情報、属性、権限といったセキュリティ情報をXMLで記述したもので、プロトコルはアサーションを転送するための規則であり、バインディングはSAMLプロトコルメッセージを標準的な転送プロトコル(HTTPなど)にマッピングする方法とされています。
シングルサインオンで使用する場合、ユーザの認証情報を提供する側をIdp(identity provider)と呼び、認証情報を利用する側をSP(service provider)と呼びます。
今回は SimpleSAMLphp を用いて検証環境の構築を行いました。
検証環境の構築
前提条件として、ローカルのPCにApacheがインストールされ、SSL通信可能な状態で作業を行います。
1. まずは以下の公式サイトからSimpleSAMLphpのダウンロードを行い解凍します。
https://simplesamlphp.org/download/
2. ディレクトリ名を simplesaml に変更し、Apache の公開ディレクトリ(htdocs)に配置します。
3. simplesamlディレクトリに、以下の内容の .htaccess ファイルを作成します。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /simplesaml
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
4. config ディレクトリ内のファイルのファイル名を以下のように変更します。
authsources.php.dist → authsources.php
config.php.dist → config.php
5. 以下のターミナルを起動し、以下のコマンドを入力し、公開鍵とプライベートキーを作成します。
openssl req -newkey rsa:2048 -new -x509 -days 3652 -nodes -subj "/C=JP/ST=SAITAMA/CN=xxx.jp" -out /htdocs/simplesaml/cert/xxx.jp.crt -keyout /htdocs/simplesaml/cert/xxx.jp.key
6. config/config.php を開き、以下の箇所を変更します。
technicalcontact_email | 自身のメールアドレスに変更 |
secretsalt | ランダムな英数字に変更 |
auth.adminpassword | 独自のパスワードに変更 |
enable.saml20-idp | true に変更 |
7. config/authsources.php を開き、entityID を独自のドメインに変更します。
8. metadata ディレクトリ内のファイルのファイル名を以下のように変更します。
$metadata[‘urn:x-simplesamlphp:example-idp’] | 独自の名前に変更 |
privatekey | 作成したプライベートキーのファイル名に変更 |
certificate | 作成した証明書のファイル名に変更 |
9. ブラウザで /simplesaml にアクセスし、auth.adminpassword で設定したパスワードを入力し、ログインします。
以下の通り、画面が表示されれば完了です。