本ページの記述はIdPv2に対するものです。IdPv3ではここで説明されている機能が概ね組み込みで標準提供されています。 |
2012年5月8日
国立情報学研究所
- 目次 -
1. はじめに
1.1. 本章の目的
1.2. 前提条件
1.3. ソフトウェア配布元
2. IdP Stateless Clustering方式の構築
2.1. Apache Tomcatの停止
2.2. ライブラリの追加
2.3. keyStoreの作成
2.4. Shibboleth-IdPの設定ファイルの変更
2.5. httpdの設定変更
2.6. tomcatの起動
2.7. httpdの再起動
本書は、Stateless Clustering方式によるShibboleth-IdPの冗長化手順書です。
本書にて、Stateless Clustering方式によるShibboleth-IdP の冗長化ができることを目的とします。
Stateless Clustering方式によるShibboleth-IdPの冗長化を構築するにあたり、下記を前提条件とします。
前提条件
本書は下記のソフトウェアを使用して記述します。
ソフトウェア | バージョン | インストール先 |
---|---|---|
osuidpext (Ohio State Custom Login Handler) | 1.1 | - |
Shibboleth-IdP | 2.3.5 | /opt/shibboleth-idp |
Apache Tomcat | 6.0.35 | /usr/java/tomcat |
Stateless Clusteringに必要なソフトウェアは以下で配布されています。その他Shibboleth IdPに取り込まれている機能も利用しています。
IdP Stateless Clustering方式のShibboleth-IdPを構築する全てのサーバで実施します。
Tomcatが起動している場合は停止します。
# /etc/init.d/tomcat stop |
Stateless Clustering用ライブラリを追加します。
# wget https://webauth.service.ohio-state.edu/~shibboleth/downloads/osuidpext-1.1-src.tar.gz # tar zxvf osuidpext-1.1-src.tar.gz # cd osuidepext-1.1/lib # cp osuidpext-1.1.jar /usr/java/tomcat/webapps/idp/WEB-INF/lib/ |
StatelessClustering用ライブラリが利用しているSecurIDPrincipal.javaをソースからコンパイルしjarファイル化します。
# svn co https://svn.shibboleth.net/extensions/java-jaas-securid/trunk/ # cd trunk # rm -f src/edu/internet2/middleware/shibboleth/jaas/securid/SecurIDLoginModule.java # ./ant.sh jarファイルの作成場所 : trunk/dist/jaas-securid-1.0.1-jdk-1.5.jar |
※svnコマンドの実行には、subversionクライアントがインストールされている必要があります。
jarファイルをサーバに追加します。
# cp dist/jaas-securid-1.0.1-jdk-1.5.jar /usr/java/tomcat/webapps/idp/WEB-INF/lib/ |
keytoolにてkeystoreを作成し、作成後、全てのShibboleth-IdPサーバにコピーします。
# keytool -genseckey -keystore secret.jks -storetype JCEKS -alias secret -keyalg AES -keysize 128 キーストアのパスワードを入力してください: ←例) secret と入力 新規パスワードを再入力してください: ←例) secret と入力 <secret> の鍵パスワードを入力してください。 (キーストアのパスワードと同じ場合は RETURN を押してください): ←そのままenter # cp secret.jks /opt/shibboleth-idp/credentials/ |
web.xmlにカスタムサーブレットをインストールして実行するサブモジュールを宣言します。
# vi /usr/java/tomcat/webapps/idp/WEB-INF/web.xml |
web.xmlに下記を追加します。
<context-param> <param-name>contextConfigLocation</param-name> <param-value>file:///opt/shibboleth-idp/conf/internal.xml; file:///opt/shibboleth-idp/conf/service.xml; file:///opt/shibboleth-idp/conf/osuext.xml;</param-value> </context-param> |
web.xmlに下記を追加します。
<!-- Servlet for doing stateless cookie-based authentication --> <servlet> <servlet-name>StatelessAuthHandler</servlet-name> <servlet-class>edu.osu.ocio.shibboleth.idp.authn.provider.StatelessLoginServlet</servlet-class> <load-on-startup>5</load-on-startup> <init-param> <param-name>dataSealerRef</param-name> <param-value>shibboleth.SSODataSealer</param-value> </init-param> <init-param> <param-name>submodules</param-name> <param-value>shibboleth.LDAPLoginSubmodule shibboleth.VelocityFormLoginSubmodule</param-value> </init-param> <init-param> <param-name>errorContext</param-name> <param-value>/</param-value> </init-param> <init-param> <param-name>errorPage</param-name> <param-value>/stale.html</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>StatelessAuthHandler</servlet-name> <url-pattern>/Authn/Stateless</url-pattern> </servlet-mapping> |
設定ファイル(osuext.xml)を新規に追加します。
# vi /opt/shibboleth-idp/conf/osuext.xml |
以下の内容を追加します。
|
※端末のサイズによっては表記がずれる可能性がございます。画面を広くしてご覧ください。
handler.xmlを変更します。
# vi /opt/shibboleth-idp/conf/handler.xml |
3行目付近を編集します。
|
※ダブルクォート(")の位置に注意
以下を追加します。
|
以下をコメントアウトします。
|
attribute-resolver.xmlを変更します。
# vi /opt/shibboleth-idp/conf/attribute-resolver.xml |
<resolver:AttributeDefinition>タグの並びに以下を追加します。
<resolver:AttributeDefinition id="cryptoTransientId" xsi:type="ad:CryptoTransientId" xmlns:ad="urn:mace:shibboleth:2.0:resolver:ad" dataSealerRef="shibboleth.SSODataSealer" lifetime="PT3M"> <resolver:AttributeEncoder xsi:type="encoder:SAML1StringNameIdentifier" xmlns:encoder="urn:mace:shibboleth:2.0:attribute:encoder" nameFormat="urn:mace:shibboleth:1.0:nameIdentifier"/> <resolver:AttributeEncoder xsi:type="encoder:SAML2StringNameID" xmlns:encoder="urn:mace:shibboleth:2.0:attribute:encoder" nameFormat="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/> </resolver:AttributeDefinition> |
<resolver:PrincipalConnector>タグの並びに以下を追加します。
<resolver:PrincipalConnector id="shibCryptoTransient" xsi:type="pc:CryptoTransient" xmlns:pc="urn:mace:shibboleth:2.0:resolver:pc" dataSealerRef="shibboleth.SSODataSealer" nameIDFormat="urn:mace:shibboleth:1.0:nameIdentifier"/> <resolver:PrincipalConnector id="saml2CryptoTransient" xsi:type="pc:CryptoTransient" xmlns:pc="urn:mace:shibboleth:2.0:resolver:pc" dataSealerRef="shibboleth.SSODataSealer" nameIDFormat="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/> |
以下の resolver:PrincipalConnector はコメントアウトします。
|
attribute-filter.xmlを変更します。
# vi /opt/shibboleth-idp/conf/attribute-filter.xml |
<afp:AttributeRule>タグの並びに以下を追加します。また、attributeID="transientId" のタグをコメントアウトします。
|
ログインファイル(login.vt)を新規に追加します。
# vi /opt/shibboleth-idp/conf/login.vt |
以下の内容を追加します。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/REC-html401/loose.dtd"> <html lang="ja"> <head> <META http-equiv="Content-Type" content="text/html;charset=UTF-8"> </head> <body> <!-- excerpt of the interesting bits --> <div id="loginForm"> #if ($authnInfo.isAccountLocked()) <blockquote style="font-weight:bold; text-align:left"> <p style="color:#cc0000">Login failed. Your Ohio State Username account is locked.</p> </blockquote> #elseif ($authnInfo.isExpiredPassword()) <blockquote style="font-weight:bold; text-align:left"> <p style="color:#cc0000">Login failed. The password associated with your Ohio State Username account has expired.</p> </blockquote> #elseif ($authnInfo.isInvalidPassword()) <blockquote style="font-weight:bold; text-align:left"> <p style="color:#cc0000">Login failed. The password you entered is incorrect.</p> </blockquote> #elseif ($authnInfo.isUnknownUsername()) <blockquote style="font-weight:bold; text-align:left"> <p style="color:#cc0000">Login failed. The username you entered cannot be identified.</p> </blockquote> #elseif ($authnInfo.getLoginException()) <blockquote style="font-weight:bold; text-align:left"> <p style="color:#cc0000">An error occurred during login: $encoder.encodeForHTML($authnInfo.getLoginException().getMessage())</p> </blockquote> #elseif ($authnInfo.getAuthnException()) <blockquote style="font-weight:bold; text-align:left"> <p style="color:#cc0000">An error occurred during login: $encoder.encodeForHTML($authnInfo.getAuthnException().getMessage())</p> </blockquote> #end <form name="login" method="POST" action="$servletPath"> <fieldset> <legend>Identify Yourself</legend> <div> <label for="userid"> Enter your Username </label> <br/> <input type="text" class="text" id="userid" name="j_username" size="50"/> </div> </fieldset> <fieldset> <legend>Password <span class="smallOr">or</span> Passcode</legend> <div> <label for="password"> Enter your account password.<br/> </label> <br/> <input type="password" class="text" id="password" name="j_password" size="50"/> </div> </fieldset> <input type="hidden" name="j_continue" value="1"/> <input id="submit" class="submit" type="submit" value="Login"/> </form> </div> </body> </html> |
この設定は2.4節で作成したログインファイル(login.vt)がテキストで表示されてしまう場合のみ設定してください。 |
velocityを利用できるようにhttpd.confを編集します。
# vi /etc/httpd/conf/httpd.conf |
DefaultType text/plainを以下のように変更します。
|
tomcatの起動
# /etc/init.d/tomcat start |
# /etc/init.d/httpd restart |
以上。