【RHEL】忘備録：OpenAMの構築

OpenAMを検証で構築する必要があったので、色々な資料を見つつ、構築したので、
その忘備録として記載します。

普段あまり、Linux系を触らないので最適解がわかってないところがあると思います。
もしあればご教示ください。

# 環境
|項目		|ソフトウェア名					|バージョン	|
|:----------|:------------------------------|-----------|
|OS			|RedHat Enterprise Linux		|9.5		|
|JDK		|OpenJDK 						|1.8		|	
|Web		|Apache 						|2.4.62		|
|AP			|Tomcat 						|9.0.87		|
|IdP		|OpenAM Community Edition		|15.1.6		|

**OpenAM Community Edition**

https://github.com/OpenIdentityPlatform/OpenAM

**OpenJDKって何？って人向け**

https://qiita.com/nowokay/items/c1de127354cd1b0ddc5e

# １．準備


## ホスト名とhostsの設定

### hostnameの設定
```
$vi /etc/hostname
```
例).
openam.example.com
FQDNで記載する。

### hostsの設定
```
$vi /etc/hosts
127.0.0.1	localhost ...4
:::1		localhost ...6
xxx.xxx.xxx.xxx openam.example.com
```
※127.0.0.1にopenam.example.comを書き込むとリダイレクトが発生するので接続できない。
　そもそもその設定は推奨してなさそう。

## ネットワーク設定
```
$nmtui
```
IPアドレスとか固定しておく

## リポジトリの確認と更新

```
$yum check-update
$yum update
```
ここは最新にしておく必要があるのかな？と思いつつ実行。
古いの抱えても仕方ないかなと思うので念のためリポジトリを最新化させる。

## OpenAM をダウンロードする
```
$cd /tmp/
$wget <OpenAM のダウンロード URL>
```
※URLは OpenAM-xx.x.x.war のような warファイルでOK
　構築時は15.1.6を実行。
$wget https://github.com/OpenIdentityPlatform/OpenAM/releases/download/15.1.6/OpenAM-15.1.6.war

ファイル名を openam.war に変更しておく
```
$mv OpenAM-xx.x.x.war openam.war
```
# ２． OpenJDK をインストールと設定

```
$java -version
$yum install java-1.8.0-openjdk
$java -version
```
OpenJDKのセキュリティポリシーを変更する

```
$update-crypto-policies --show
$update-crypto-policies --set LEGACY
```
課題：ここのポリシーで何か原因を持ってる
　　　理想はこのポリシーを変更しないでOpenAMの水準を合わせることで解決したい。

再起動後にポリシーが適用される模様なので、再起動後にチェックする。

# ３．Apache(httpd)をインストールする

## Apacheのインストール
```    
$httpd -v
$yum info httpd
$yum -y install httpd
$httpd -v
$yum update httpd
```

SSLモジュールのインストール

```
$httpd -M | grep ssl
$yum install mod_ssl
$httpd -M | grep ssl
 ssl_module (shared)
 ```
ssl_module (shared)が出たらインストール完了
 

# ４．Tomcatをインストールする
```
$yum info tomcat
$yum -y install tomcat
$tomcat version
$yum update tomcat
```

# ５．Firewall の設定
とりあえずOpenAMを接続する既定ポート（TCP8080）を開放する

```
$firewall-cmd --add-port=8080/tcp --permanent
$firewall-cmd --reload
```

# ６．諸設定をする

## OpenAM をTomcatに配置する

```
$ls /usr/share/tomcat/
```
tomcatの配下にwebappsがあることを見る

```
$ls /usr/share/tomcat/webapps/
```
webapps/下に何もないことを確認する。

openam.warファイルをwebappsに配置する。
```
$cp openam.war /usr/share/tomcat/webapps/
```
mvでもいい

```
$ls /usr/share/tomcat/webapps/
```
webapps/配下にopenam.warがあることを確認する。

## デーモン（サービス）を自動起動化する
```
$systemctl enable httpd
$systemctl enable tomcat
```
再起動などで一度OSが停止するとWebが機能しなくなるので必須


## 構成を適用する
```
$reboot
```

## ７．キーストアの生成
OpenAM用初期設定後に自動生成されているtest鍵ペアは、すべてのOpenAMサーバ共通の為本番環境では使用はしないこと。
	
### 準備
```
mkdir -p /usr/share/tomcat/openam/openam/keystores
```
どこでもいいと思う

### キーストアの生成
```
$keytool -genkeypair \
 -keyalg rsa \
 -alias openam-idp\
 -dname "CN=openam.example.com,O=Example,ST=Tokyo,C=JP" \		#※1．
 -keypass changeit \
 -keystore /usr/share/tomcat/openam/openam/keystore.jceks \		#※2．
 -storetype JCEKS \												#※2.
 -storepass changeit \
 -validity 365 \
 -keysize 2048
```
最低限のラインで生成できる。
必要があれば以下の情報を基に作成する。

**※1．-dnameのパラメータ例**
|パラメータ	|内容											|例					|
|:----------|:----------------------------------------------|:------------------|
|CN			|Common Name（一般的にホスト名やサービス名）		|example.com  		|
|OU			|部署名など										|IT					|
|O			|組織名											|YourOrganization	|
|L			|市区町村										|Tokyo				|
|ST			|都道府県										|Tokyo				|
|C			|国コード（2文字）								|JP					|


**※#2．Keystoreの暗号ファイル生成について**
PKCS12が推奨値らしい。
-keystore mykeystore.p12 \
-storetype PKCS12 \
場所については多分-keystoreで指定かな？


# ７．確認
## 構成確認
```
$update-crypto-policies --show
```
```
$ls /usr/share/tomcat/webapps/
```
openamディレクトリが出来ていることを確認する

## ブラウザで接続してみる

http://"localhost":8080/openam
例).http://openam.example.com/openam

※内部（LAN）NWで接続するのであれば **"Localhost"** はIPアドレスでもよいと思います。

OpenAMの画面が出ればOK

# 参考資料
後でまとめる