[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[upki-fed:00348] IdP 2.3.0アップデート情報まとめその2(アップデートが一段落した後の注意点)



西村です。先日の続きです。

古い設定ファイルがそのまま引き続き2.3.0でも使えると言っても新機能は使えないまま
ですので、2.3.0に付いてくる設定ファイルと古いものとの違いを調べました。詳細な
diffは添付の通りですが、以下では主な相違点および注意すべきところをまとめました。

2.3.0デフォルト設定との関係で注意すべきところ:

* HttpServletHelper.getRelyingPartyConfirmationManagerが
HttpServletHelper.getRelyingPartyConfigurationManagerに名称変更されています。
今のところ古いメソッドも残っているようですが。
https://issues.shibboleth.net/jira/browse/SIDP-359

* 期間/間隔を表す数値の指定方法が変わっています。旧来の指定もできますが。
例えば、relying-party.xmlのメタデータvalidUntilの値を制限するmaxValidityIntervalは、
従来秒数で"1296000"を指定していましたが、「15日間」という本来の意味から"P15D"と指定する
ようになっています。こうしないと、以下のWARNINGがログに残ります。
08:51:37.767 - WARN [edu.internet2.middleware.shibboleth.common.config.SpringConfigurationUtils:271] - Numerical duration form is deprecated. The property 'maxValidityInterval' on metadata filter of type {urn:mace:shibboleth:2.0:metadata}RequiredValidUntil should use the duration notation: P15DT0H0M0.000S
同様にrelying-party.xmlのassertionLifetimeが"300000"から"PT5M"(5分)に変更になっています。
"Timeout/Duration/Interval Property Syntax Change"
https://wiki.shibboleth.net/confluence/display/SHIB2/IdP22Upgrade#IdP22Upgrade-Timeout%2FDuration%2FIntervalPropertySyntaxChange

* login.configのパラメータ名変更(再掲)
   ldapUrl="ldap://localhost" <- host
   baseDn="o=test_o,dc=ac,c=JP" <- base
   userFilter="uid={0}" <- userField
 デフォルト設定ファイルも更新されていませんがこれは更新漏れです。
 login.config sample needs updating
 https://issues.shibboleth.net/jira/browse/SIDP-494

* logging.xmlの表記が変更されています
Logging Configuration
https://wiki.shibboleth.net/confluence/display/SHIB2/IdP22Upgrade#IdP22Upgrade-LoggingConfiguration
- <ImmediateFlush>いらない
- <layout> → <encoder>
 ch.qos.logback.classic.PatternLayout
  → ch.qos.logback.classic.encoder.PatternLayoutEncoder
- <charset>UTF-8</charset>追加

* 2.3.0デフォルト設定 XMLに署名する場所が変わった 認証応答→アサーション
 設定箇所 relying-party.xmlのSAML2SSOとSAML2ArtifactResolution
 どちらの設定でもShibboleth SPが受け取らないということはないようですが、万が一
 一部のIdPで認証応答が拒否されるというようなことがあればこの辺を疑ってください。

* LDAPやデータベースからの結果をキャッシュするようになった
LDAP and Relational Database Result Caching
https://wiki.shibboleth.net/confluence/display/SHIB2/IdP22Upgrade#IdP22Upgrade-LDAPandRelationalDatabaseResultCaching

* その他、参考まで2.1.5の設定ファイルと2.3.0の設定ファイルの重要な違いを添付します。
 (idp-conf-diff-2.1.5-2.3.0.txt)

* 万が一install.shで設定ファイルを上書きしたときに変更されるファイル
基本はnoを選択して上書きしない方が良い。
アップデート前にZIPを展開したディレクトリのsrc/installer/resources/conf-tmpl/
と比較して設定ファイルの変更点を確認する。
- attribute-filter.xml
   各IdPの設定が入っているので古いものを使用
- attribute-resolver.xml
   各IdPの設定が入っているので古いものを使用
- handler.xml
   基本2.3のものを使用 RemoteUser -> UsernamePasswordの切り替えくらい
- internal.xml
   基本2.3のものを使用
- logging.xml
   基本2.3のものを使用、levelとフォーマットだけ修正する
- idp-metadata.xml
   学認設定では学認メタデータを参照しているのでこれは参照しない
- idp.{crt,jks,key}
   学認設定では参照しない

* Attribute{Issuer,Requester}EntityAttribute{Exact,Regex}Match の追加
正直なところよく理解していませんがattribute-filter.xmlに使える
条件が増えています。
あらかじめメタデータ中に記載されたExtensions、例えば
<EntityDescriptor entityID=".../shibboleth-sp">
 <Extensions>
   <mdattr:EntityAttributes>
     <saml:Attribute NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
      Name="urn:example.org:policy">
      <saml:AttributeValue
        xsi:type="xs:string">urn:example.org:policy:ABCD1234</saml:AttributeValue>
    </saml:Attribute>
   </mdattr:EntityAttributes>
 </Extensions>
 ...
に対して、以下のように条件を指定することができるようです。
<PolicyRequirementRule xsi:type="saml:AttributeRequesterEntityAttributeExactMatch" 
 attributeName="urn:example.org:policy"
 attributeValue="urn:example.org:policy:ABCD1234" />

* 付属するライブラリが最新版になっていますので、ドキュメントで
説明されているがライブラリが古いためうまく動かないということがなくなります。
例えば、vt-ldapが3.3.3となっているため、バックエンドのLDAPが複数のときのドキュメント
https://wiki.shibboleth.net/confluence/display/SHIB2/IdPAuthUserPass#IdPAuthUserPass-Failoverconfiguration
で説明されているTlsConnectionHandlerが使えるようになります。

以下蛇足

* idp.warを再配置・展開しなくても済むようにする設定
Using a Context Deployment Fragment
https://wiki.shibboleth.net/confluence/display/SHIB2/IdPApacheTomcatPrepare#IdPApacheTomcatPrepare-UsingaContextDeploymentFragment
直接/opt/shibboleth-idp/war/idp.warを見に行くようになります。
紛らわしいので、webapps/やwork/Catalina/localhost/下の古いのを削除するのを忘れないこと。

* 本家最新マニュアルではバックチャンネルにshibboleth-jce-1.1.0.jarを使わずに
tomcat6-dta-ssl-1.0.0.jarを使うようになっています。
https://wiki.shibboleth.net/confluence/display/SHIB2/IdPApacheTomcatPrepare#IdPApacheTomcatPrepare-SupportingSOAPEndpoints

* バックエンドLDAPが複数の場合の蛇足:
LDAP設定は認証と属性取得(DataConnector)と2カ所にあって、DataConnector
の設定方法は以下にあります。
https://wiki.shibboleth.net/confluence/display/SHIB2/ResolverLDAPDataConnector#ResolverLDAPDataConnector-MultipleLDAPReplicas
ちなみに、LDAP複数に関しては以下にも若干古いドキュメントがあり、
https://wiki.shibboleth.net/confluence/display/SHIB2/IdPMultipleLDAP
別の部分の設定方法が書いてあるのですが、LDAP接続のタイムアウトを短くするための
設定として、/usr/java/default/jre/lib/jndi.propertiesというファイルを
作成して以下の記述をするように説明されています。
com.sun.jndi.ldap.connect.timeout=500

-- 
西村健
国立情報学研究所 TEL:03-4212-2720
attribute-resolver.xml
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="eduPersonAssurance" sourceAttributeID="eduPersonAssurance">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:eduPersonAssurance" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.11" friendlyName="eduPersonAssurance" />
+    </resolver:AttributeDefinition>
handler.xml
>     <ph:ProfileHandler xsi:type="ph:SAML2SSO"
>                     inboundBinding="urn:mace:shibboleth:2.0:profiles:AuthnRequest"
>                     outboundBindingEnumeration="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST-SimpleSign
>                                                 urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST 
>                                                 urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact">
>         <ph:RequestPath>/SAML2/Unsolicited/SSO</ph:RequestPath>
>     </ph:ProfileHandler>
> 
>     <ph:ProfileHandler xsi:type="ph:SAML2ECP"
>           inboundBinding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP"
>           outboundBindingEnumeration="urn:oasis:names:tc:SAML:2.0:bindings:SOAP">
>         <ph:RequestPath>/SAML2/SOAP/ECP</ph:RequestPath>
>     </ph:ProfileHandler>
???c???
>     <!-- Login handler that delegates the act of authentication to an external system. -->
>     <!-- This login handler and the RemoteUser login handler will be merged in the next major release. -->
>     <!--
>     <ph:LoginHandler xsi:type="ph:ExternalAuthn">
>         <ph:AuthenticationMethod>urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified</ph:AuthenticationMethod>
>         <ph:QueryParam name="foo" value="bar" />
>     </ph:LoginHandler>
>     -->
internal.xml
7a8,9
>     <bean id="shibboleth.CacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" />
> 
26a29
>         <property name="parserPool" ref="shibboleth.ParserPool" />
33a37
>         <property name="overrideLogging" value="false"/>
35a40,42
>                 <prop key="runtime.log.logsystem.class">
>                     edu.internet2.middleware.shibboleth.common.util.Slf4JLogChute
>                 </prop>
53c60,61
<     <bean id="shibboleth.ParserPool" class="org.opensaml.xml.parse.BasicParserPool" depends-on="shibboleth.LogbackLogging">
---
>     <bean id="shibboleth.ParserPool" class="org.opensaml.xml.parse.StaticBasicParserPool" 
>           depends-on="shibboleth.LogbackLogging" init-method="initialize">
97d104
<         <constructor-arg ref="shibboleth.ParserPool" />
168a176,184
>         <entry>
>             <key>
>                 <value>urn:mace:shibboleth:2.0:profiles:AuthnRequest</value>
>             </key>
>             <bean id="shibboleth.UnsolicitedSSODecoder"
>                 class="edu.internet2.middleware.shibboleth.idp.profile.saml2.UnsolicitedSSODecoder">
>                 <constructor-arg ref="shibboleth.IdGenerator" />
>             </bean>
>         </entry>
logging.xml
10,12c10
<     <logger name="edu.internet2.middleware.shibboleth">
<         <level value="INFO" />
<     </logger>
---
>     <logger name="edu.internet2.middleware.shibboleth" level="INFO" />
 -> 他も同様
47c38,39
<         <layout class="ch.qos.logback.classic.PatternLayout">
---
>         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
>             <charset>UTF-8</charset>
60c51,52
<         <layout class="ch.qos.logback.classic.PatternLayout">
---
>         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
>             <charset>UTF-8</charset>
76,90c64,67
<         <layout class="ch.qos.logback.classic.PatternLayout">
<             <!-- General logging pattern -->
<             <Pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} - %level [%logger:%line] - [%t] - %msg%n</Pattern>
<             
<             <!-- 
<                 Two MDC variables are available for authenticated users: 'idpSessionID' and 'principalName'. 
<                 You may include these the data in the logging pattern by means of %mdc{NAME}
<                 You may include the thread ID by means of %t
<             -->
<             <!-- Example logging pattern using thread ID and principal name -->
<             <!--
<             <Pattern>%date{HH:mm:ss.SSS} - %level [%logger:%line] - [%t:%mdc{principalName}] - %msg%n</Pattern>
<              -->
<             
<         </layout>
---
>         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
>             <charset>UTF-8</charset>
>             <Pattern>%date{HH:mm:ss.SSS} - %level [%logger:%line] - %msg%n</Pattern>
>         </encoder>
relying-party.xml
42c43
<                               assertionLifetime="300000"
---
>                               assertionLifetime="PT5M"
 -> 4カ所
59,60c60,61
<                               signResponses="conditional"
<                               signAssertions="never" 
---
>                               signResponses="never"
>                               signAssertions="always" 
62,65c63,75
<                               encryptNameIds="conditional" />
---
>                               encryptNameIds="never" />
xxxcxxx
>         <rp:ProfileConfiguration xsi:type="saml:SAML2ECPProfile"
>                               includeAttributeStatement="true"
>                               assertionLifetime="PT5M"
>                               assertionProxyCount="0"
>                               signResponses="never"
>                               signAssertions="always"
>                               encryptAssertions="conditional"
>                               encryptNameIds="never" />
70c80
<                               encryptNameIds="conditional" />
---
>                               encryptNameIds="never" />
72,74c82,84
<         <ProfileConfiguration xsi:type="saml:SAML2ArtifactResolutionProfile" 
<                               signResponses="conditional"
<                               signAssertions="never"
---
>         <rp:ProfileConfiguration xsi:type="saml:SAML2ArtifactResolutionProfile" 
>                               signResponses="never"
>                               signAssertions="always"
76c86
<                               encryptNameIds="conditional"/>
---
>                               encryptNameIds="never"/>
xxxcxxx
<                                 maxValidityInterval="604800" />
---
>                                 maxValidityInterval="P7D" />
 -> P15D
179a166
>         <security:Rule xsi:type="samlsec:Replay" required="false" />