【Shibboleth V2】IdPサーバのインストール(1)  ため息の始まり…(前提作業・Apache/Tomcat設定変更)

##今夜の一言
いやぁ、ほんっとに書きたくないなぁこの記事。

##重要な注意事項
(1)この記事は<font color="Red">Shibboleth Version2</font>について記載しています！
　 Shibbolethの現時点の最新バージョン(2018.1月時点)は3.3.2(2017.10.4リリース)ですのでご注意を。
(2)ここではただ単に機械的にインストールする方法だけを記載します。
　 専門用語とかの説明は後回しっと。
(3)こんなの知っている人には全然役に立たないので非難はスルーします。
(4)続きの更新は不定期でかつ記事の編集も気力が尽きた時点で終了します。

##環境情報
この記事は以下の環境でインストールした結果を記載しています。

(1)仮想化ソフトウェア：VMware ESXi 5.5 
(2)OS：CentOS 6.5(Final)
(3)OSのインストールタイプ：Minimal

##§1 IdPインストールに必要なパッケージ
Shibboleth IdP(Identity Provider)のインストールにはまずは以下のパッケージも導入する必要がありますよ。

(1)OracleJDK or OpenJDK
(2)Apache And mod_ssl
(3)Java6 or 7

##§2 インストールを始める前の注意事項
###§2-1 ホスト名には注意
IdPのインストールには色々と注意しなければならないことがあるみたいです。
一つはホスト名です。
Shibbolethを使用した大きなフェデレーションのフレームワークに__「学認」__という親玉がいます。
こいつの__運用フェデレーション__っていうのに参加するときはホスト名がとても重要な要素となります。
理由は後日ってことで…

###§2-2 NTP必須 キーワードは5分
ShibbolethではSAML（Security Assertion Markup Languageの略称）というXML形式のマークアップ言語を利用します。
SAMLは認証トークンを利用してアサーションの関係を持つサーバー間で通信を行う仕様となっているのですが、SAMLで通信する対象のサーバー間で時刻情報に5分以上のズレが発生するとSP(ServiceProvider)側のログイン画面でエラーが表示されます。
__※この辺の話はまた別の記事を書きます__

##§3 IdPインストール手順
###§3-1 必要なパッケージのインストール

まずはjdkのインストールから。jdkにはOpenとOracleの2つがありますけど、
ShibbolethではOpenのほうを推奨しています。
両者の違いについては話題が別になるのでまた後日ということでお願いします。
【参考記事】
◇OpenJDKは使い物になるか？OpenJDKの実際と今後 （NTTデータ オープンソースDAY 2015 Autumn 講演資料）
https://www.slideshare.net/hadoopxnttdata/openjdk-nttdata-oss-day-2015-autumn
◇OpenJDK 協力体制の下で
http://www.oracle.com/technetwork/jp/tutorials/java-mj12-qa-smith-1683420-ja.pdf

```:jdkのインストール
yum install java-1.7.0-openjdk
```

Tomcatはバージョン6をインストールしてください。
yumで入らない場合は以下のサイトからダウンロードできます。
https://archive.apache.org/dist/tomcat/tomcat-6/

```:Tomcatのインストール
yum install tomcat6
```
###§3-2 Profileの設定変更
/etc/profileに2行目～7行目までの設定を追加してください。
JAVAのHOMEとBASE設定およびCATALINAのHOMEとBASE設定を追記します。
設定を追記した後は環境変数を読み込みます。

```:/etc/profileの設定
1 # /etc/profile
2 JAVA_HOME=/usr/lib/jvm/jre
3 MANPATH=$MANPATH:$JAVA_HOME/man
4 CATALINA_HOME=/usr/share/tomcat6
5 CATALINA_BASE=$CATALINA_HOME
6 PATH=$JAVA_HOME/bin:$CATALINA_BASE/bin:$CATALINA_HOME/bin:$PATH
7 export PATH JAVA_HOME CATALINA_HOME CATALINA_BASE
8
9  # System wide environment and startup programs, for login setup
10 # Functions and aliases go in /etc/bashrc
11
12 # It's NOT a good idea to change this file unless you know what you
13 # are doing. It's much better to create a custom.sh shell script in
14 # /etc/profile.d/ to make custom changes to your environment, as this
15 # will prevent the need for merging in future updates.
```
```:環境変数の読み込み
source /etc/profile
```

###§3-3 Tomcatの設定変更
以下の作業はyumからパッケージをインストールした場合のみ実施してください。

```:対象ファイル
$CATALINA_BASE/conf/tomcat6.conf
```
ファイルの15行目～19行目を追加してください。
こちらの設定はJSPとサーブレットを配置するフォルダを指定しています。

・CATALINA = サーブレットコンテナ
・JASPER = JSPを処理するサーブレット

```:tomcat6.confの設定
 1 # System-wide configuration file for tomcat6 services
 2 # This will be sourced by tomcat6 and any secondary service
 3 # Values will be overridden by service-specific configuration
 4 # files in /etc/sysconfig
 5 #
 6 # Use this one to change default values for all services
 7 # Change the service specific ones to affect only one service
 8 # (see, for instance, /etc/sysconfig/tomcat6)
 9 #
10
11 # Where your java installation lives
12 #JAVA_HOME="/usr/lib/jvm/java-1.5.0"
13
14 # Where your tomcat installation lives
15 CATALINA_BASE="/usr/share/tomcat6"
16 CATALINA_HOME="/usr/share/tomcat6"
17 JASPER_HOME="/usr/share/tomcat6"
18 CATALINA_TMPDIR="/var/cache/tomcat6/temp"
19 JAVA_ENDORSED_DIRS="${CATALINA_HOME}/endorsed"
```
###§3-4 Apacheの設定変更
例によってApacheも設定変更です。
ServerNameに自分のホスト名を設定するっていうお決まりのやつです。

```:/etc/httpd.confの設定
※xxx.xxx.xxxにはホスト名を指定する
（省略）
ServerName xxx.xxx.xxx:80
（省略）
```
SSLを使用するので、ssl.confファイルも編集しますよ。
SSLは色々と問題があるので、TLSのみ有効化するようにしてください。

あとはApacheからTomcatへのアクセスする際にAJP (Apache JServ Protocol) というプロトコルを使用します。
この通信がポート番号8009を使用して行われます。
ProxyPassという設定を追加しますが、この設定は__http://localhost/idp/__で呼び出されたときは、__ajp://localhost:8009/idp/__へリダイレクトするという意味です。

あと、当たり前な部分での注意事項としてはmod_sslのパッケージを追加しておかないとssl.confファイルは見つからないです。

```:/etc/httpd/conf.d/ssl.confの設定
※xxx.xxx.xxxにはホスト名を指定する
（省略） 
<VirtualHost _default_:443>
（省略）
ServerName xxx.xxx.xxx:443
ProxyPass /idp/ ajp://localhost:8009/idp/
（省略）
SSLProtocol all -SSLv2 -SSLv3
（省略）
```
###§3-5 Server.xmlファイルの設定変更
IdPサーバーでは8080ポートは使用しません。
なので、TomcatをShibboleth以外の用途で8080ポートを使用しない限りは
以下のように73行目～78行目までの設定を無効化します。
代わりにShibbolethで使用する8009ポートの設定を89行目～91行目のように追加してください。

```:$CATALINA_BASE/conf/server.xmlの設定
（省略）
73 <!--
74 <Connector executor="tomcatThreadPool"
75  port="8080" protocol="HTTP/1.1"
76  connectionTimeout="20000"
77  redirectPort="8443" />
78 -->
（省略）
89 <!-- Define an AJP 1.3 Connector on port 8009 -->
90 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"
91 enableLookups="false" tomcatAuthentication="false" address="127.0.0.1" maxPostSize="100000" />
```
とりあえず、仕事の合間を縫ってね。更新しました汗
本当にギリギリの生活が続きますね。

次回はShibboleth-IdPサーバのインストールを記載します。

個人的にはWebアプリケーション作成に関する記事をアップしていきたいですね。
AWSの資格取得とかDjangoの話とかどっか行っちゃったけど。