All About ACS: Java を ACS 専用にして安全にする

Oracle Java 8 の利用を想定して書きますが、他の Java でも同じテクニックが利用できます。OpenJDK 系は、自動更新の仕組みがないので、セキュリティ更新に対してJava を更新を続ける負担への対策にもなるでしょう。

「[IBM i Access Client Solutions 用のJavaの選択と利用](https://qiita.com/6onoda/items/a6cc3a4700c0705521b6)」でも書いたように、Java 9 以降では5250画面が崩れる場合があり、OpenJDK系 8 では横向き用紙にJPS印刷ができません。
結局、ACS を使うにあたり、一番制約の少ないのは Oracle Java 8 です。

IBM Java 8 でも技術上は問題ないのですが、ライセンス上の懸念があります。IBM Java は特定の IBM 製品を動かすための実行環境として、製品にバンドルされているもので、他の目的での利用はライセンス上、許可されていないはずです。

今回は、Oracle Java 8 を、できるだけ安全に使う方法を考えます。

なお、この方法で本当に安全であると宣言するものでは、ありません。利用環境のセキュリティ基準を満たすか、本当にこの方法でいいかは、ご利用される方が自分で判断する必要があります。当情報は何も保障しません。

# Oracle Java は無償で使えるか ?
2019年4月のリリースから商用利用する Oracle Java のダウンロードに有償サポートが必要になりました。無償利用の代替はOpenJDKとありますが、Java のバグのせいで、横向き用紙にJPS印刷ができませんので、ACS での利用には十分な回答にはなりません。

https://java.com/ja/download/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/841bf158-503b-fd41-8ae8-b4ba95239cac.png)

# 以前の Oracle Javaは無償で使える ?

[Oracle Java SE Licensing FAQ](https://www.oracle.com/technetwork/java/javase/overview/oracle-jdk-faqs.html) に、こうあります。

> What happens to the Oracle Java SE releases I downloaded under previous licenses, such as the BCL?
You may continue to use releases you have downloaded under the terms of the license under which you downloaded them. Legacy releases are still available in the Java Archives. 

以前にダウンロードしたものは使え続けられるとあります。
旧版は[Java Archives](https://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html) からダウンロードし続けられるともあります。

[サイト](https://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html)を見ると、新規にダウンロードする場合も以前からの「[Oracle Binary Code License Agreement for the Java SE Platform Products and JavaFX](https://www.oracle.com/technetwork/java/javase/terms/license/index.html)」が適用されるようです。(日本語参考訳は[こちら](https://www.oracle.com/technetwork/jp/licenses/javase-dev-license-2595998-ja.html))

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/882d22d0-e3d0-5e7a-e625-cba901708b92.png)

なお、上記の情報は個人的な調査を記したものです。
旧版の Oracle Java 8 の入手と利用に関し、当情報は何も保障しません。
入手と利用には、ご利用される方が自分で調査・必要なら Oracle 社への問い合わせ・判断する必要があります。

# Java を安全にするとは ?
京都教育大学のサイトの「[Oracle Java SEの有償化に伴うOpenJDKへの切り替えの案内](https://ipc.kyokyo-u.ac.jp/page/696)」に、このような記述がありました。

>セキュリティが担保された状態であれば使用しても良いとありますが、どのような場合ですか？
> ⇒ 次の条件すべてに当てはまる場合は、既存の脆弱性および今後発見される脆弱性に対する攻撃を防止であると判断し、古いバージョンのJavaを使用し続けても構いません。

>特定のアプリケーション専用であり、OSにインストールされておらず、関連付けもされていない。Windowsの場合は下記のような状態をいう。
>「アプリと機能」または「プログラムと機能」の一覧に表示されない。
>java.exeにPATHが通っていない。コマンドプロンプトで`java -version`とコマンドがないとエラーになる。
>環境変数JAVA_HOMEが設定されていない。
>Java関係の拡張子(.jar、.jnlp)に対して関連付けがされていない。jarファイル、jnplファイルをダブルクリックしても起動しない。
>インストールされている全てのブラウザでJavaプラグインが動作しない。

この状態のJava をACSから利用したいと思います。

# どのようにJava を ACS 専用にするか?

IBM のドキュメント「[Java Options for IBM i Access Client Solutions?](https://www-01.ibm.com/support/docview.wss?uid=ibm10719405) 」に、こんな一行があります。

> Place the Java JRE folder next to the acslaunch program that is being used.

JRE が ACS の起動プログラムの隣に、あれば使うといっています。

# Java を導入する
JRE 8u202 の 64 ビット版を導入しました。C:\\Program Files\\Java\\jre1.8.0_202 に導入されました、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/4652f957-020c-2aa7-0591-752b9dbc397d.png)

# ACS を導入する

通常通り、ACS を導入します。
64 ビット Javaを使うため、install_acs_64.js で導入しました。

# Javaのフォルダーを、acslaunch_win-XX.exe の隣にコピーする

acslaunch_win-XX.exe の隣に、フォルダー毎コピーします。
この後、Java をアンインストールするので、移動ではなく**コピー**です。
フォルダーの名前は、任意です。フォルダー直下に bin があるレベルでコピーします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/32bc0925-e2e7-2bd5-af06-960fc053b1d8.png)

# Java をアンインストールする

Windows から Java が見つかれないように、アンインストールします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/07412dad-544d-61df-d265-7a40e3307da2.png)

アンインストールされました。

```
C:\Users\User01>java -version
'java' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

C:\Users\User01>ECHO %JAVA_HOME%
%JAVA_HOME%
```
jar の関連付けも外れているはずです。

# JAVA.EXE などの削除

acslaunch_win-XX.exe は ACS を起動する時、java.exe を使いません。念のため、bin の中にあるJavaを起動する 3つの exe を削除します。
javaws.exe は、OpenJDK 系には存在しません。
他の exe も使いませんので、削除しても構いません。

* java.exe - Java を通常起動するのに使われます。
* javaw.exe - Java を GUI モードで起動するのに使われます。
* javaws.exe - Java Web Start に使われます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/6a3261e3-090c-bee4-6caf-4c6c6548ebc6.png)

# 起動する

「acslaunch_win-64.exe -v」のように、-v を付けて起動するとコピーしたJavaが使われているのが分かります。

```
C:\Users\User01>IBM\ClientSolutions\Start_Programs\Windows_x86-64\acslaunch_win-64.exe -v
Verbose mode enabled
1463: Trying to load jli...
1050:  added 'C:\Users\User01\IBM\ClientSolutions\Start_Programs\Windows_x86-64/jre1.8.0_202/bin/jli.dll', reason='JRE adjacent launcher'
1737: Loaded "jli" from 'C:\Users\User01\IBM\ClientSolutions\Start_Programs\Windows_x86-64/jre1.8.0_202/bin/jli.dll'
1463: Trying to load jvm...
1050:  added 'C:\Users\User01\IBM\ClientSolutions\Start_Programs\Windows_x86-64/jre1.8.0_202/bin/server/jvm.dll', reason='JRE adjacent launcher'
1737: Loaded "jni" from 'C:\Users\User01\IBM\ClientSolutions\Start_Programs\Windows_x86-64/jre1.8.0_202/bin/server/jvm.dll'
1834:  native: 8.64.2.0 27Jun2019 15:07:58
```
もちろん、アイコンでも起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/e091f5d7-9ff1-c394-bda1-ff850550a0b9.png)

コピーしたものが使われています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/bfdb9e64-028b-687f-bbe0-1d803c486864.png)

もちろん、2台目以降は、Javaのインストール/アンインストールをするのではなく、コピー済み、exe 削除済みの Java を展開すれば大丈夫です。

***
2019/06/28
- IBMドキュメントの情報を加筆
- GUI起動時の製品情報スクリーンショットを追加
- 安全性や旧版の利用に対して当情報は無保証であり、利用者が自分の責任で判断する必要があると明記
***
「All About ACS」では IBM i に対する新しいクライアント「IBM i Access Client Solutions」の情報をいろいろ提供していきます。
[記事一覧はこちら](http://qiita.com/6onoda/items/2dc925586d8d3b8644f2)で確認いたけます。

許可の無い転載を禁じます。
この記事は筆者の個人的な責任で無保証で提供しています。
当記事に関してIBMやビジネスパートナーに問い合わせることは、固くお断りします。
***