IdP, SP, DS に関する設定・運用・カスタマイズの各種情報についてまとめるページです。
目次
IdP関連情報
Back-Channel設定
Tomcat : clientAuth="want"への変更
「技術ガイド > IdPセッティング > サーバ証明書の設定 > Back-Channelの設定」のSOAP設定でのclientAuthに設定する値がtrueから want に変更されています。本家 の情報も更新されていますので、Tomcatの設定ファイルserver.xmlを合わせて修正することをおすすめいたします。
クライアント認証
Back-ChannelでSPからクライアント認証を受け付けるときに、クライアント証明書のExtenededKeyUsageにclientAuth(TLS Web Client Authentication)なしの証明書が用いられる可能性を考慮して設定を行なうことを推奨します。例えば、UPKIのサーバ証明書プロジェクトで発行されたサーバ証明書には、通常はclientAuth(TLS Web Client Authentication)がありません。
SPが下記の証明書を用いてBack-Channel接続を行ってきた場合にIdPがSPのクライアント認証を受け付けずにエラーとする実装があるようです。
$ openssl x509 -in sp-certificate.pem -noout -text | grep -A 1 'X509v3 Extended Key Usage:' X509v3 Extended Key Usage: TLS Web Server Authentication
- clinetAuth(TLS Web Client Authentication) なし
- serverAuth(TLS Web Server Authentication) あり
LDAP
LDAPプロキシサーバ : 複数台LDAPサーバ向けのLDAPプロキシサーバ設定方法
IdPから複数台のLDAPサーバの情報を参照するために使用するLDAPプロキシサーバ設定方法を資料にまとめました。各LDAPサーバとLDAPプロキシ間はLDAPS接続またはStartTLS接続をするものとします。詳細はPDF資料をご参照ください。
※ 内容の異なる複数のLDAPツリーを横断的に検索するlogin.configの例はShibboleth Wiki:IdPAuthUserPassにあります。この場合、attribute-resolver.xmlでは2つのLDAP DataConnectorを定義し両方をDependencyに記述してください。ただし、同一uidが2つのLDAPツリー上に存在しない場合に限ります。
SP関連情報
Embedded DS
特定の言語で表示する方法
Embedded DSは、ブラウザの表示言語設定を反映して表示する言語を選びますが、特定の言語で表示したい場合の方法が下記に記載されてます。
- DISCOVERY-71課題情報を取得中... ステータスサーバ証明書
SAML 1およびSAML 2でBack-Channelを使用するSPの場合
Back-Channel時にSPの証明書を用いてクライアント認証が行なわれることを想定して、ExtenedKeyUsageにclietAuth(TLS Web Client Authentication)を含めたサーバ証明書(もしくはExtendedKeyUsage自体が存在しないサーバ証明書)を用いることを推奨します。
$ openssl x509 -in sp-certificate.pem -noout -text | grep -A 1 'X509v3 Extended Key Usage:' X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication
- clinetAuth(TLS Web Client Authentication) あり
- serverAuth(TLS Web Server Authentication) あり
Back-Channelを用いて通信を行なうときに下記の証明書を用いた場合にはSPのクライアント認証が受け付けられずにIdPでエラーとする実装があるようです。
$ openssl x509 -in sp-certificate.pem -noout -text | grep -A 1 'X509v3 Extended Key Usage:' X509v3 Extended Key Usage: TLS Web Server Authentication
-
- clientAuth(TLS Web Client Authentication) なし
- serverAuth(TLS Web Server Authentication) あり
プロトコル
DSを経由せず強制的に特定のIdPに遷移する方法
Apacheの設定で require valid-user
を設定し、そのコンテンツにアクセスした時点でDSへリダイレクトされる、というのが学認における通常のフローかと思いますが、Apacheの設定に以下を追加すればDSを経由せずに特定のIdPに直接リダイレクトします。
ShibRequestSetting entityID https://idp.example.ac.jp/idp/shibboleth
さらに、以下のようなURLにアクセスさせることで、指定したIdPで認証させた後に指定したURLに遷移させることが可能です。
entityID
の部分で(%エンコードされていて分かりにくいですが)、リダイレクトさせたいIdPのentityIDを指定します。
target
には、認証成功後にリダイレクトする先のSP上のURLを指定します。
URL中の"/DS"の部分は、shibboleth2.xmlで<SessionInitiator>要素を追加していない場合は"/Login"となります。
上記URLにアクセスすると、SPセッションがすでに存在するかどうかに関わらずIdPに遷移します。IdPにてセッションが存在する場合はそのままSPに戻ります。認証成功後はSPのセッションは上書きされます。
ログアウト処理
Shibboleth SP 2.5より requireLogoutWith
が実装されました。 requireLogoutWith
では指定されたURL(通常はShibbolethのログアウトURLを指定)に遷移したのちに、元のページの戻るといった処理が自動的に行なわれます。
Shibboleth認証になっているパス(例えば /secure
)の中にWebアプリケーションのログアウト処理のページを用意します。ログアウト処理のページは仮に /secure/logout
とします。
- Apacheの設定
$ cat /etc/httpd/conf.d/shib.conf (...略...) <Location /secure> AuthType shibboleth ShibRequestSetting requireSession 1 require valid-user </Location>
Webアプリケーションのログアウト処理 /secure/logout
に対して次のApacheの設定を追加すると requireLogoutWith
に指定されている /Shibboleth.sso/Logout
にてShibbolethセッションの破棄と /secure/logout
によるWebアプリケーションのログアウト処理が一連の動作として行なわれます。
<Location /secure/logout> require shibboleth ShibRequestSetting requireSession false ShibRequestSetting requireLogoutWith "/Shibboleth.sso/Logout" </Location>
requireLogoutWith
に関する詳細は https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPContentSettings をご参照ください。
DS関連情報
PHP
PHP 5.3以降でのTimezoneに関するエラー
PHP 5.3以降を使用しているマシンでGakuNinDSを動かすときには、httpdのエラーログに下記の警告が出力されることがあります。
[Fri Mar 09 15:26:17 2012] [error] [client xxx.xxx.xxx.xxx] PHP Warning: date(): It is not safe to rely on the system's timezone settings. You are required to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for 'JST/9.0/no DST' instead in /var/www/html/GakuNinDS/functions.php on line 484, referer: <span class="nolink">https://sp.exapmle.com/</span>
上記の警告が出力されていてもGakuNinDSの動作には問題ありませんが、下記のように/etc/php.iniにてdate.timezoneを定義することでエラーは出力されなくなります。
--- php.ini 2012/06/18 08:12:14 1.1 +++ php.ini 2012/06/18 08:19:26 @@ -943,7 +943,7 @@ [Date] ; Defines the default timezone used by the date functions ; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone -;date.timezone = +date.timezone = "Asia/Tokyo" ; http://www.php.net/manual/en/datetime.configuration.php#ini.date.default-latitude ;date.default_latitude = 31.7667