こんにちは。SIOS OSSエバンジェリスト/セキュリティ担当の面 和毅です。
SAML環境のテストのために、SimpleSAMLphpを使って簡易IdP / SPをセットアップしました。SAML環境に関しては引き続き連載致します。今回は「SimpleSAMLphpを用いたIdPにApache+mod_auth_mellonを繋げてみる」を纏めます。
連載及びコンテンツ
(SAML第1回) SimpleSAMLphpを使った簡易IdPの作成
(SAML第2回) SimpleSAMLphpを使った簡易SPの作成
(SAML第3回) mod_auth_mellonを使った簡易SPの作成
環境
- IdP(連載第一回・第二回で作成・使用したもの)
- OS: CentOS 7.9(最新にyumで更新)
- Apache: 2.4.6-97(最新のものをyumから取得)
- PHP: 7.3.27(remiから取得)
- SimpleSAMLphp: 1.19.0(最新)
- IdP ホスト名:idp.example.net
- SP(新たに作成)
- OS: CentOS 7.9(最新にyumで更新)
- Apache: 2.4.6-97(最新のものをyumから取得)
- PHP: 7.3.27(remiから取得)
- SP ホスト名:mellon.example.net
- 前提
- mellon.example.net/saml_test
- mellon.example.net/cgi-bin
のいずれかにアクセスする際にSAMLで連携してIdPの認証を使用する。
1. SP用のWebサーバ(Apache)の作成
CentOS 7を使ってWebサーバ+PHP(PHP 7.3以上)が動く状況を作成します。以下、第一回、第二回で行ったのと同じ手順でCentOS 7でApache+PHP(7.3)が動く状態を作成します。
2.mod_auth_mellonのインストール
Yumを使用してmod_auth_mellonをインストールします。以下、rootで作業します。
- mod_auth_mellonのインストールにより/etc/httpd/conf.d/auth_mellon.confファイルが生成されます。
- /etc/httpd/samlディレクトリを作成し、/etc/httpd/samlディレクトリに移動します。
- 幾つかのURLを決定します。
- Entityidを決定します。通常はSPのURLで、SPのメタデータを取得できるSPのURLになります。以下の例では”https://mellon.example.net/sp”を使用します。
- endpointを決定します。以下の例では”https://mellon.example.net/mellon”を使用します。
- /etc/httpd/samlディレクトリ内でmellon_create_metadata.shツールを使用します。”mellon_create_metadata.sh Entityid endpoint”の形式で実行します。
(Assertion Consumer Service : SAML SP endpointのURLです。ここでは使いませんが、第四回で説明する「GoogleをIdPとして使用する」で使います)。
下記の例では、Entityid: https://mellon.example.net/sp, Endpoint(ACS): https://mellon.example.net/mellonとなります(GoogleのときはACSとしてのパスの最後にpostResponseをつける必要があることに注意しましょう)。
[root@mellon saml]#/usr/libexec/mod_auth_mellon/mellon_create_metadata.sh https://mellon.example.net/sp https://mellon.example.net/mellon
- 上述のコマンド実行により、/etc/httpd/samlディレクトリに以下の3つのファイルが出来ています。
[root@mellon conf.d]# ls /etc/httpd/saml/ https_mellon.example.net_sp.cert https_mellon.example.net_sp.key https_mellon.example.net_sp.xml [root@mellon conf.d]#
- idpからXML形式のメタデータを取得し、上述の/etc/httpd/saml/ディレクトリに「idp-metadata.xml」ファイルとして作成します。
- spのメタデータ(/etc/httpd/saml/https_mellon.example.net_sp.xml)の内容をIdPに登録します。メタデータの形式に注意しましょう(SimpleSAMLphpのIdPに登録する場合には、一度IdPのWebUIを利用してXML->メタデータにパースしたデータを登録する)。
- /etc/httpd/conf.d/auth_mellon.confを編集します。今回は
- /var/www/html/saml_test
- /var/www/cgi-bin
の2つのディレクトリでIdPでの認証が必要なように設定します(どちらかでログインしていれば、SSOによりもう片方では認証は聞かれない)。
MellonCacheSize 100 MellonLockFile "/run/mod_auth_mellon/lock" <Location /> MellonEndpointPath "/mellon" MellonIdPMetadataFile /etc/httpd/saml/idp-metadata.xml MellonSPPrivateKeyFile /etc/httpd/saml/https_mellon.example.net_sp.key MellonSPCertFile /etc/httpd/saml/https_mellon.example.net_sp.cert MellonSPMetadataFile /etc/httpd/saml/https_mellon.example.net_sp.xml </Location> <Location /saml_test> AuthType "Mellon" Require valid-user MellonEnable "auth" </Location> <Location /cgi-bin> AuthType "Mellon" Require valid-user MellonEnable "auth" </Location>
3. Apacheの再起動
Apacheを再起動します。
[root@mellon ~]# systemctl restart httpd
4. SPのテスト
- /var/www/cgi-binに”printenv.cgi”を作成します。
#!/usr/bin/perl print "Content-type: text/plain\n\n"; foreach $var (sort(keys(%ENV))) { $val = $ENV{$var}; $val =~ s|\n|\\n|g; $val =~ s|"|\\"|g; print "${var}=\"${val}\"\n"; }
- https://mellon.example.net/cgi-bin/printenv.cgiにアクセスすると、IdPでの認証が呼び出されます。
- ログインに成功すると、CGIによりApacheの環境変数が表示されます。mod_auth_mellonによりIdPからの返答に含まれる属性は”MELLON_”が接頭語として付く変数に含まれていることがわかります。
5. SPからログアウトする際に”400エラー”が出る場合
- IdP側のメタデータを修正します。SimpleSAMLphpの場合には/var/www/simplesaml/metadata/saml20-idp-hosted.phpに下記を加えます。
'privatekey' => 'idp.example.net.pem', 'certificate' => 'idp.example.net.crt', // For supporting logout by using mod_auth_mellon 'validate.logout' => TRUE, 'redirect.sign' => TRUE,
- SP側からlogoutをReturnToを付加して呼び出して確認します。例えば、下記のように呼び出します。
https://hoge.sample.com/mellon/logout?ReturnTo=https%3A%2F%2Fhoge.sample.com
まとめ
mod_auth_mellonを用いると、Apacheと組み合わせてSPを簡単に作成してテストすることが可能です。
次回は
次回は、今回作成したmod_auth_mellonを、GoogleのIdPと接続してテストを行います。
セキュリティ系連載案内
- OSSセキュリティ技術の会による日経Linuxでの連載「IoT時代の最新SELinux入門」がITPro上で読めるようになりました。技術の会代表で第一人者である中村さん等による、最新のSELinuxの情報やコマンド類等も更新されているのでお薦めです。
- OSSセキュリティ技術の会によるThinkITでの連載「開発者のためのセキュリティ実践講座」がThinkIT上で開始しました。技術の会の中の人間で、最新の代表的なOSSセキュリティ技術を紹介していきます。
- OSSセキュリティ技術の会により、ThinkITでLinuxSecuritySummit 2018のレポートが紹介されています。
- OSSセキュリティ技術の会の面により、@ITで「OSS脆弱性ウォッチ」が連載されています。
- OSSセキュリティ技術の会の面により、@ITで「OpenSCAPで脆弱性対策はどう変わる?」が連載されています。
- OSSセキュリティ技術の会のメンバーにより、@ITで「Berkeley Packet Filter(BPF)入門」が連載されています。
CM
こちらで小学生の勉強支援サイトをオープンしました。算数のプリント(都度、自動生成)が無料でダウンロードできます。コンテンツは未だ少ないですが、徐々に増やしていきます。