サーバ証明書の取得とApacheの設定
...
1.「UPKI電子証明書発行サービス」の利用管理者編をご覧いただき、サーバ証明書発行を申請します。機関の審査手続きによっては証明書の交付までには数日を要する場合がありますので、お早めに申請してください。
接続実験をするだけであれば、IdPインストール時に作成された証明書(自己署名証明書)をそのまま利用してテストフェデレーションに参加することも可能です。その場合は、以降の記述のうち「中間CA証明書」の部分は無視してください。
...
...
2.入手したサーバ証明書をもとに、以下のファイルに設定してください。(★)
■/etc/httpd/conf.d/ssl.conf
...
まず、秘密鍵を"root"ユーザのみが参照できるようにアクセス制限がかかっているか確認してください。確認できない場合は以下のようにして所有者・グループ・パーミッションを設定してください。
パネル |
---|
|
chown root:root /
|
ヒント |
---|
|
・各証明書と秘密鍵を「/root/GETFILE」配下よりコピーしてください。 # cp /root/GETFILE/server{,-chain}.crt /etc/pki/tls/ certs/ # cp /root/GETFILEprivate/server.key ← 秘密鍵の格納先
chmod 400 /etc/pki/tls/private / |
※秘密鍵のアクセス制限をかけている場合は、以下のように"tomcat"ユーザで参照できるように設定します。
パネル |
---|
borderColor | #cccccc |
---|
bgColor | #eeeeee |
---|
borderStyle | solid |
---|
|
chgrp tomcat /opt/shibboleth-idp/credentials/server.{key,p12}
chmod g+r /opt/shibboleth-idp/credentials/server. {key ,p12}
|
/etc/httpd/conf.d/ssl.conf を以下のように編集してください。(★)
パネル |
---|
borderColor | #cccccc |
---|
bgColor | #eeeeee |
---|
borderStyle | solid |
---|
|
(省略)
SSLCertificateFile /etc/pki/tls/certs/server.crt ← サーバ証明書の格納先 (省略)
SSLCertificateKeyFile /etc/pki/tls/private/server.key ← 秘密鍵の格納先 (省略)
SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt ← 中間CA証明書の格納先 ↑ 先頭の「#」を削除して、コメントを解除してください。 |
※端末のサイズによっては表記がずれる可能性がございます。画面を広くしてご覧ください。
詳しくは、サーバ証明書インストールマニュアルの Apache 2 + mod_ssl 編を参照してください。
...
メタデータの作成と提出
...
...
...
ホスト名:ex-idp-test01.gakunin.nii.ac.jpとなり、ファイル名:ex-idp-test01.xmlです。
以下のコマンドでファイルをコピーします。
# cp /root/GETFILE/idp-metadata.xml /root/ex-idp-test01.xml
コピー後、IdPメタデータテンプレートを参考に必要な項目を変更します。
(証明書部分には、/opt/shibboleth-idp/credentials/server.crtの内容を使用します。) 展開 |
---|
|
学認申請システム(テストFed)から登録を行います。入力したデータから自動的にメタデータが生成されますのでメタデータ作成の必要はありません。詳細は参加のページをご覧ください。 ⇒参加 |
展開 |
---|
|
学認申請システムから登録を行います。入力したデータから自動的にメタデータが生成されますのでメタデータ作成の必要はありません。詳細は参加のページをご覧ください。 ⇒参加 |
ヒント |
---|
|
・作成したメタデータは学認申請システムではなく、実習セミナー内のDSサーバに転送します。 以下は、転送コマンドの例です。 メタデータファイル名を各自のファイル名に変更して実行してください。 例)ホスト名:ex-idp-test01.gakunin.nii.ac.jpの場合 # scp /root/ex-idp-test01.xml test@ex-ds.gakunin.nii.ac.jp:METADATA 転送したメタデータは、1分周期で他のメタデータとマージ処理を行い、実習セミナー内のフェデレーションメタデータが更新されます。 ※1分周期で行う為、最大約1分登録までに時間がかかります。 |
...
Back-Channelの設定
SAML 1のSPにも接続する場合は、IdPとの通信時にTLS接続を行うため、下記にしたがいBack-Channelの設定を行ってください。 このTLS接続ではポート8443を利用します。
ヒント |
---|
|
・実習セミナーではSAML 1のSPは対象としていないため以下の設定は不要です。 |
1.キーストアの設定
サーバ証明書を格納したキーストアを作成します。
パネル |
---|
borderColor | #cccccc |
---|
bgColor | #eeeeee |
---|
borderStyle | solid |
---|
|
# cd /opt/shibboleth-idp/credentials # UMASKORIG="`umask`" ; umask 0077 # openssl pkcs12 -export -out server.p12 -in サーバ証明書.crt -inkey サーバ秘密鍵.key -name サーバ名
(ここで聞かれるエクスポートパスワードを後述のserver(ここで聞かれるエクスポートパスワードを後述のidp-backchannel.xmlの「P12パスワード」に指定します。任意のものを設定できます)iniの「P12パスワード」に指定します。任意のものを設定できます)
# umask "$UMASKORIG" (上記一連のumaskコマンドは"chmod 600 server.p12"と同義) |
TomcatをJettyを"tomcatjetty"ユーザで実行する場合は、さらに以下のコマンドを実行しTomcatが読み取れるようにします。ユーザで実行する場合は、さらに以下のコマンドを実行しJettyが読み取れるようにします。
パネル |
---|
|
# chgrp tomcat jetty /opt/shibboleth-idp/credentials/server.p12
# chmod g+r /opt/shibboleth-idp/credentials/server.p12
|
...
2.ライブラリのコピー
https://build.shibboleth.net/nexus/service/localcontent/repositories/releases/content/net/shibboleth/utilities/jetty9/trustanyjetty94-dta-ssl/1.0.0/trustanyjetty94-dta-ssl-1.0.0.jar よりダウンロードします。
trustany jetty94-dta-ssl-1.0.0.jar を $CATALINA_HOMEjar を /opt/jetty-base/lib 配下にコピーします。/ext 配下にコピーします。
パネル |
---|
|
# wget https://build.shibboleth.net/nexus/service/localcontent/repositories/releases/content/net/shibboleth/utilities/jetty9/trustanyjetty94-dta-ssl/1.0.0/trustanyjetty94-dta-ssl-1.0.0.jar # cp trustanyjetty94-dta-ssl-1.0.0.jar $CATALINA_HOME /opt/jetty-base/lib/ext
|
情報 |
---|
ダウンロードされるJARファイルのSHA-256ハッシュ値は以下の通りです。さらに真正性を確認したい場合はPGP署名をご利用ください。
# sha256sum trustanyjetty94-dta-ssl-1.0.0.jar 80f80f45dcb6671ad963e6ebf761baeb195502ca5b274b6b3f99e4ed2a900466 trustany5e5de66e3517d30ff19ef66cf7a4aa5443b861d83e36a75e85845b007a03afbf jetty94-dta-ssl-1.0.0.jar
|
3.SOAP設定
$CATALINA_BASE/conf/server.xml ファイルに以下を追加します。
情報 |
---|
なお、配置したファイルはデフォルトでは使用されません。すでに /opt/jetty-base/lib/ext 配下に存在する jetty9-dta-ssl-1.0.0.jar が使用されます。併存していても問題ありません。もしデフォルトの設定で問題がある場合は(一部の証明書で問題になるという情報があります)、etc/idp-backchannel.xml の以下の部分を修正し新しいライブラリを使用するようにしてください。 コード ブロック |
---|
| @@ -6,7 +6,7 @@
<!-- and no container trust (delegate to application) |
|
パネル |
---|
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150"
SSLEnabled="true"-->
<!-- for backchannel (SOAP) | scheme="https"
maxPostSize="100000"
secure="true"
clientAuth="want"
sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2"<!-- ============================================================= -->
- <New id="shibContextFactory" class="net.shibboleth.utilities.jetty9.DelegateToApplicationSslContextFactory">
+ <New id="shibContextFactory" class="net.shibboleth.utilities.jetty94.DelegateToApplicationSslContextFactory">
<Set name="KeyStorePath"><Property | keystoreFilename="idp.backchannel.keyStorePath" default="../ | optshibboleth-idp/credentials/serveridp-backchannel.p12" /></Set>
<Set | keystorePass="P12パスワード" keystoreTypename="KeyStoreType"><Property name="idp.backchannel.keyStoreType" default="PKCS12" |
trustManagerClassName="net.shibboleth.utilities.ssl.TrustAnyCertificate" /> |
情報 |
---|
sslEnabledProtocols はSSLv3を無効にするための記述です。なお、TLSv1.1とTLSv1.2の記載がありますが、実際に使用できるか否かはJava(JVM)のバージョンに依存します。
|
...
name="KeyStorePassword"><Property name="idp.backchannel.keyStorePassword" default="changeit" /></Set> |
|
3.SOAP設定
/opt/jetty-base/start.d/idp-backchannel.ini ファイルを以下のように作成します。
パネル |
---|
|
# cd /opt/jetty-base/start.d # cp idp-backchannel.ini.dist idp-backchannel.ini # chgrp jetty idp-backchannel.ini # chmod 640 idp-backchannel.ini
|
/opt/jetty-base/start.d/idp-backchannel.ini ファイルを以下のように修正します。
パネル |
---|
|
# ---------------------------------------
# Module: idp-backchannel
# Shibboleth IdP Dedicated SOAP Connector
# ---------------------------------------
--module=idp-backchannel
## Backchannel connector port to listen on
# idp.backchannel.port=8443
↑コメントアウト(#)を削除。以下同様 ## Backchannel keystore file path (relative to $jetty.base)
# idp.backchannel.keyStorePath=../shibboleth-idp/credentials/server.p12
## Backchannel keystore password
# idp.backchannel.keyStorePassword=P12パスワード
## Backchannel keystore type
# idp.backchannel.keyStoreType=PKCS12
|
/opt/jetty-base/etc/idp-backchannel.xml ファイルを以下のように修正します。
パネル |
---|
(省略)
<New id="shibHttpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
<Arg><Ref refid="httpConfig"/></Arg>
↑上の行を削除し↓で置き換え
<Set name="secureScheme"><Property name="jetty.httpConfig.secureScheme" default="https" /></Set>
<Set name="securePort"><Property name="jetty.httpConfig.securePort" deprecated="jetty.secure.port" default="8443" /></Set>
<Set name="outputBufferSize"><Property name="jetty.httpConfig.outputBufferSize" deprecated="jetty.output.buffer.size" default="32768" /></Set>
<Set name="outputAggregationSize"><Property name="jetty.httpConfig.outputAggregationSize" deprecated="jetty.output.aggregation.size" default="8192" /></Set>
<Set name="requestHeaderSize"><Property name="jetty.httpConfig.requestHeaderSize" deprecated="jetty.request.header.size" default="8192" /></Set>
<Set name="responseHeaderSize"><Property name="jetty.httpConfig.responseHeaderSize" deprecated="jetty.response.header.size" default="8192" /></Set>
<Set name="sendServerVersion"><Property name="jetty.httpConfig.sendServerVersion" deprecated="jetty.send.server.version" default="true" /></Set>
<Set name="sendDateHeader"><Property name="jetty.httpConfig.sendDateHeader" deprecated="jetty.send.date.header" default="false" /></Set>
<Set name="headerCacheSize"><Property name="jetty.httpConfig.headerCacheSize" default="1024" /></Set>
<Set name="delayDispatchUntilContent"><Property name="jetty.httpConfig.delayDispatchUntilContent" deprecated="jetty.delayDispatchUntilContent" default="true"/></Set>
<Set name="maxErrorDispatches"><Property name="jetty.httpConfig.maxErrorDispatches" default="10"/></Set>
<Set name="blockingTimeout"><Property deprecated="jetty.httpConfig.blockingTimeout" name="jetty.httpConfig.blockingTimeout.DEPRECATED" default="-1"/></Set>
<Set name="persistentConnectionsEnabled"><Property name="jetty.httpConfig.persistentConnectionsEnabled" default="true"/></Set>
<Set name="requestCookieCompliance"><Call class="org.eclipse.jetty.http.CookieCompliance" name="valueOf"><Arg><Property name="jetty.httpConfig.requestCookieCompliance" deprecated="jetty.httpConfig.cookieCompliance" default="RFC6265"/></Arg></Call></Set>
<Set name="responseCookieCompliance"><Call class="org.eclipse.jetty.http.CookieCompliance" name="valueOf"><Arg><Property name="jetty.httpConfig.responseCookieCompliance" default="RFC6265"/></Arg></Call></Set>
<Set name="multiPartFormDataCompliance"><Call class="org.eclipse.jetty.server.MultiPartFormDataCompliance" name="valueOf"><Arg><Property name="jetty.httpConfig.multiPartFormDataCompliance" default="RFC7578"/></Arg></Call></Set>
<Set name="relativeRedirectAllowed"><Property name="jetty.httpConfig.relativeRedirectAllowed" default="false"/></Set>
<Call name="addCustomizer">
<Arg>
(省略)
|
ヒント |
---|
<Arg><Ref refid="httpConfig"/></Arg> の部分を削除していることによりhttp-forwardedモジュールの他rewriteモジュールの設定がBack-Channelに反映されない可能性がありますのでご注意ください。Back-Channelに対するこれらのモジュールの使用は避けてください。 |
4.有効化
/opt/shibboleth-idp/conf/relying-party.xml ファイルを以下のように修正します。
情報 |
---|
以下ではSAML 1.x自体の有効化(デフォルトでは無効)も行っておりますが、SAML 2.0 Attribute Queryのみ必要な場合は前半のコメント解除は不要です。 |
パネル |
---|
|
<bean id="shibboleth.DefaultRelyingParty" parent="RelyingParty">
<property name="profileConfigurations">
<list>
<!-- SAML 1.1 and SAML 2.0 AttributeQuery are disabled by default. -->
<!-- --> ← コメントを解除
<bean parent="Shibboleth.SSO" p:postAuthenticationFlows="attribute-release" />
<ref bean="SAML1.AttributeQuery" />
<ref bean="SAML1.ArtifactResolution" />
<!-- --> ← コメントを解除
<bean parent="SAML2.SSO" p:postAuthenticationFlows="attribute-release" />
<ref bean="SAML2.ECP" />
<ref bean="SAML2.Logout" />
<!-- --> ← コメントを解除
<ref bean="SAML2.AttributeQuery" />
<!-- --> ← コメントを解除
<ref bean="SAML2.ArtifactResolution" />
<ref bean="Liberty.SSOS" />
</list>
</property>
</bean>
|
設定変更後は、Jettyの再起動を行います。
パネル |
---|
|
# systemctl restart jetty
|