Java のインストール方法とか同梱される cacerts や tzdb.dat の確認

Java の導入方法や配置されるファイルを説明しているページがなかったので作った。

TL;DR

  • Oracle Java SE とそれ以外の各種 OpenJDK 配布物についていろいろと確認
  • (Amazon Corretto / OpenJDK(Redhat) 以外では) cacerts の更新を別の運用として考えておくほうがよさそう
    • 利用する Web サービスの情報に合わせるか、とりあえず最新情報を反映するか
    • 手放しだとどこかで刺さりそう
      • 証明書の検証が失敗する問題に出くわす可能性
      • 利用している配布物の違いにより片方では証明書の検証に成功し、もう一方では失敗するなどの問題に出くわす可能性
  • (OpenJDK(Redhat) 以外では) tzdb.dat の更新を別の運用として考えておくほうがよさそう
    • Oracle の提供する tzupdater を利用する (提供ライセンスは BCL)
    • Azul の提供する ziupdater を利用する (提供ライセンスは GPLv2+CE)
    • だがどちらも tzdata2018f.tar.gz より新しいタイムゾーンデータを反映できないという不具合がある
      • Redhat はこの不具合を解決済みで tzdata2018g を反映している!
    • 要チェック! JDK-8212684

対象にした配布物

考慮事項

  • 環境
  • インストール方法
  • 配置先
  • バージョン情報
  • cacerts
  • tzdb.dat

調査した結果

Amazon Corretto 8

確認した環境

amazonlinux:2.0.20181010 (d656eea421ba)

インストール方法

$ amazon-linux-extras install corretto8

$ yum install -y java-1.8.0-amazon-corretto-devel

配置

インストール先は /usr/lib/jvm の下でした。

alternatives にも対応しています。

$ ls -ld /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64
drwxr-xr-x 9 root root 4096 Nov 23 05:38 /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64

$ alternatives --config java

There are 4 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
   1           /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/bin/java
   2           /usr/lib/jvm/zulu-8/bin/java
   3           /usr/lib/jvm/zulu-11/bin/java
*+ 4           /usr/java/jdk-11.0.1/bin/java

Enter to keep the current selection[+], or type selection number: ^C

バージョン情報

2018/11/23 時点ではバージョン情報に amazon-corretto-preview という文字列が入っています。

$ /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/bin/java -version
openjdk version "1.8.0_192"
OpenJDK Runtime Environment (build 1.8.0_192-amazon-corretto-preview-b12)
OpenJDK 64-Bit Server VM (build 25.192-b12, mixed mode)

cacerts

cacertsca-certificates パッケージ (Mozilla の CA root certificate bundle)に含まれるファイルを参照するようになっています。

依存パッケージとして管理されているため、更新の手間は軽減できそうです。

キーストアに登録されている CA ルート証明書の総数は 133 でした。 おそらく、Mozilla の CA ルート証明書から生成しているのではないかと思います (簡単に確認する方法が思いつかなかった…)。

$ yum deplist java-1.8.0-amazon-corretto | grep ca-certificate
  dependency: ca-certificates
   provider: ca-certificates.noarch 2018.2.22-70.0.amzn2

$ ls -l /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/lib/security/cacerts
lrwxrwxrwx 1 root root 53 Nov 23 05:35 /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/lib/security/cacerts -> ../../../../../../../../../../../etc/pki/java/cacerts

$ ls -l /etc/pki/java/cacerts
lrwxrwxrwx 1 root root 40 Oct 10 18:54 /etc/pki/java/cacerts -> /etc/pki/ca-trust/extracted/java/cacerts

$ yum provides /etc/pki/ca-trust/extracted/java/cacerts
Loaded plugins: ovl, priorities
153 packages excluded due to repository priority protections
ca-certificates-2017.2.14-71.amzn2.noarch : The Mozilla CA root certificate bundle
Repo        : amzn2-core
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts



ca-certificates-2018.2.22-70.0.amzn2.noarch : The Mozilla CA root certificate bundle
Repo        : amzn2-core
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts



ca-certificates-2018.2.22-70.0.amzn2.noarch : The Mozilla CA root certificate bundle
Repo        : installed
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts

$ keytool -list -keystore /etc/pki/ca-trust/extracted/java/cacerts -storepass changeit | head -n 4
Keystore type: jks
Keystore provider: SUN

Your keystore contains 133 entries

$ grep -c "BEGIN CERTIFICATE" /etc/pki/tls/cert.pem
133

tzdb.dat

tzdb.datJava だけが利用するタイムゾーン情報データベースです。 tzdata2018e から変換したファイルが配置されていました。

OS の tzdata パッケージとは独立しています。

IANAで公開されているデータベースファイルを ziupdatertzupdater で変換して使用します。

$ ls -l /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/lib/tzdb.dat
-rw-r--r-- 1 root root 105882 Nov 13 17:31 /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/lib/tzdb.dat

$ od -Ax -t x1z /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/lib/tzdb.dat  | head
000000 01 00 04 54 5a 44 42 00 01 00 05 32 30 31 38 65  >...TZDB....2018e<
000010 02 57 00 0e 41 66 72 69 63 61 2f 41 62 69 64 6a  >.W..Africa/Abidj<
000020 61 6e 00 0c 41 66 72 69 63 61 2f 41 63 63 72 61  >an..Africa/Accra<
000030 00 12 41 66 72 69 63 61 2f 41 64 64 69 73 5f 41  >..Africa/Addis_A<
000040 62 61 62 61 00 0e 41 66 72 69 63 61 2f 41 6c 67  >baba..Africa/Alg<
000050 69 65 72 73 00 0d 41 66 72 69 63 61 2f 41 73 6d  >iers..Africa/Asm<
000060 61 72 61 00 0d 41 66 72 69 63 61 2f 41 73 6d 65  >ara..Africa/Asme<
000070 72 61 00 0d 41 66 72 69 63 61 2f 42 61 6d 61 6b  >ra..Africa/Bamak<
000080 6f 00 0d 41 66 72 69 63 61 2f 42 61 6e 67 75 69  >o..Africa/Bangui<
000090 00 0d 41 66 72 69 63 61 2f 42 61 6e 6a 75 6c 00  >..Africa/Banjul.<

Azul Zulu 8

確認した環境

amazonlinux:2.0.20181010 (d656eea421ba)

インストール方法

$ yum install -y https://cdn.azul.com/zulu/bin/zulu8.33.0.1-jdk8.0.192-linux.x86_64.rpm

RHELOracle Linux なら Yum リポジトリを利用することもできる。

$ yum-config-manager --add-repo http://repos.azulsystems.com/rhel/zulu.repo
$ yum-config-manager --enable zulu
$ yum install -y zule-8

配置

インストール先は /usr/lib/jvm の下でした。

alternatives にも対応しています。

$ ls -ld /usr/lib/jvm/zulu-8
drwxr-xr-x 9 root root 4096 Nov 23 18:14 /usr/lib/jvm/zulu-8

$ alternatives --config java

There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
   1           /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/bin/java
*+ 2           /usr/lib/jvm/zulu-8/bin/java

Enter to keep the current selection[+], or type selection number:

バージョン情報

2018/11/23 時点ではバージョン情報に Zulu 8.33.0.1-linux64 という文字列が入っています。

$ /usr/lib/jvm/zulu-8/jre/bin/java -version
openjdk version "1.8.0_192"
OpenJDK Runtime Environment (Zulu 8.33.0.1-linux64) (build 1.8.0_192-b01)
OpenJDK 64-Bit Server VM (Zulu 8.33.0.1-linux64) (build 25.192-b01, mixed mode)

cacerts

cacerts に登録されている CA ルート証明書の総数は 158 でした。

$ keytool -list -keystore /usr/lib/jvm/zulu-8/jre/lib/security/cacerts -storepass changeit | head -n 4
Keystore type: jks
Keystore provider: SUN

Your keystore contains 158 entries

tzdb.dat

tzdata2018e から変換したファイルが配置されていました。

$ ls -l /usr/lib/jvm/zulu-8/jre/lib/tzdb.dat
-rw-r--r-- 1 root root 105882 Oct 20 00:52 /usr/lib/jvm/zulu-8/jre/lib/tzdb.dat

$ od -Ax -t x1z /usr/lib/jvm/zulu-8/jre/lib/tzdb.dat  | head
000000 01 00 04 54 5a 44 42 00 01 00 05 32 30 31 38 65  >...TZDB....2018e<
000010 02 57 00 0e 41 66 72 69 63 61 2f 41 62 69 64 6a  >.W..Africa/Abidj<
000020 61 6e 00 0c 41 66 72 69 63 61 2f 41 63 63 72 61  >an..Africa/Accra<
000030 00 12 41 66 72 69 63 61 2f 41 64 64 69 73 5f 41  >..Africa/Addis_A<
000040 62 61 62 61 00 0e 41 66 72 69 63 61 2f 41 6c 67  >baba..Africa/Alg<
000050 69 65 72 73 00 0d 41 66 72 69 63 61 2f 41 73 6d  >iers..Africa/Asm<
000060 61 72 61 00 0d 41 66 72 69 63 61 2f 41 73 6d 65  >ara..Africa/Asme<
000070 72 61 00 0d 41 66 72 69 63 61 2f 42 61 6d 61 6b  >ra..Africa/Bamak<
000080 6f 00 0d 41 66 72 69 63 61 2f 42 61 6e 67 75 69  >o..Africa/Bangui<
000090 00 0d 41 66 72 69 63 61 2f 42 61 6e 6a 75 6c 00  >..Africa/Banjul.<

Azul Zulu 11

確認した環境

amazonlinux:2.0.20181010 (d656eea421ba)

インストール方法

yum install -y https://cdn.azul.com/zulu/bin/zulu11.2.3-jdk11.0.1-linux.x86_64.rpm

RHELOracle Linux なら Yum リポジトリを利用することもできる。

$ yum-config-manager --add-repo http://repos.azulsystems.com/rhel/zulu.repo
$ yum-config-manager --enable zulu
$ yum install -y zule-11

配置

インストール先は /usr/lib/jvm の下でした。

alternatives にも対応しています。

$ ls -ld /usr/lib/jvm/zulu-11
drwxr-xr-x 9 root root 4096 Nov 23 21:23 /usr/lib/jvm/zulu-11

$ alternatives --config java

There are 4 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
   1           /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/bin/java
   2           /usr/lib/jvm/zulu-8/bin/java
   3           /usr/lib/jvm/zulu-11/bin/java
*+ 4           /usr/java/jdk-11.0.1/bin/java

Enter to keep the current selection[+], or type selection number: ^C

バージョン情報

2018/11/23 時点ではバージョン情報に Zulu11.2+3 という文字列が入っています。

$ /usr/lib/jvm/zulu-11/bin/java -version
openjdk version "11.0.1" 2018-10-16 LTS
OpenJDK Runtime Environment Zulu11.2+3 (build 11.0.1+13-LTS)
OpenJDK 64-Bit Server VM Zulu11.2+3 (build 11.0.1+13-LTS, mixed mode)

cacerts

cacerts に登録されている CA ルート証明書の総数は 158 でした。

$ keytool -list -keystore /usr/lib/jvm/zulu-11/lib/security/cacerts -storepass changeit | head -n 4
Keystore type: jks
Keystore provider: SUN

Your keystore contains 158 entries

tzdb.dat

tzdata2018e から変換したファイルが配置されていました。

$ ls -l /usr/lib/jvm/zulu-11/lib/tzdb.dat
-rw-r--r-- 1 root root 105882 Oct 20 00:04 /usr/lib/jvm/zulu-11/lib/tzdb.dat

$ od -Ax -t x1z /usr/lib/jvm/zulu-11/lib/tzdb.dat | head
000000 01 00 04 54 5a 44 42 00 01 00 05 32 30 31 38 65  >...TZDB....2018e<
000010 02 57 00 0e 41 66 72 69 63 61 2f 41 62 69 64 6a  >.W..Africa/Abidj<
000020 61 6e 00 0c 41 66 72 69 63 61 2f 41 63 63 72 61  >an..Africa/Accra<
000030 00 12 41 66 72 69 63 61 2f 41 64 64 69 73 5f 41  >..Africa/Addis_A<
000040 62 61 62 61 00 0e 41 66 72 69 63 61 2f 41 6c 67  >baba..Africa/Alg<
000050 69 65 72 73 00 0d 41 66 72 69 63 61 2f 41 73 6d  >iers..Africa/Asm<
000060 61 72 61 00 0d 41 66 72 69 63 61 2f 41 73 6d 65  >ara..Africa/Asme<
000070 72 61 00 0d 41 66 72 69 63 61 2f 42 61 6d 61 6b  >ra..Africa/Bamak<
000080 6f 00 0d 41 66 72 69 63 61 2f 42 61 6e 67 75 69  >o..Africa/Bangui<
000090 00 0d 41 66 72 69 63 61 2f 42 61 6e 6a 75 6c 00  >..Africa/Banjul.<

Oracle OpenJDK 11

確認した環境

amazonlinux:2.0.20181010 (d656eea421ba)

インストール方法

$ curl -L https://download.java.net/java/GA/jdk11/13/GPL/openjdk-11.0.1_linux-x64_bin.tar.gz |
tar xzf - -C /usr/lib/jvm/

配置

配布形式が tar.gz のため、インストール先は任意。 当然 alternatives にも未対応。

$ ls -ld /usr/lib/jvm/jdk-11.0.1
drwxr-xr-x 8 root root 4096 Nov 24 09:12 /usr/lib/jvm/jdk-11.0.1

バージョン情報

2018/11/23 時点ではバージョン情報に特徴的な文字列が入っていません。

$ /usr/lib/jvm/jdk-11.0.1/bin/java -version
openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)

cacerts

cacerts に登録されている CA ルート証明書の総数は 93 でした。

$ ls -l /usr/lib/jvm/jdk-11.0.1/lib/security/cacerts
-rw-r--r-- 1 668 668 102883 Oct  6 21:17 /usr/lib/jvm/jdk-11.0.1/lib/security/cacerts

$ keytool -list -keystore /usr/lib/jvm/jdk-11.0.1/lib/security/cacerts -storepass changeit | head -n 4
Keystore type: jks
Keystore provider: SUN

Your keystore contains 93 entries

tzdb.dat

tzdata2018e から変換したファイルが配置されていました。

$ ls -l /usr/lib/jvm/jdk-11.0.1/lib/tzdb.dat
-rw-r--r-- 1 668 668 105882 Oct  6 21:17 /usr/lib/jvm/jdk-11.0.1/lib/tzdb.dat

$ od -Ax -t x1z /usr/lib/jvm/jdk-11.0.1/lib/tzdb.dat | head
000000 01 00 04 54 5a 44 42 00 01 00 05 32 30 31 38 65  >...TZDB....2018e<
000010 02 57 00 0e 41 66 72 69 63 61 2f 41 62 69 64 6a  >.W..Africa/Abidj<
000020 61 6e 00 0c 41 66 72 69 63 61 2f 41 63 63 72 61  >an..Africa/Accra<
000030 00 12 41 66 72 69 63 61 2f 41 64 64 69 73 5f 41  >..Africa/Addis_A<
000040 62 61 62 61 00 0e 41 66 72 69 63 61 2f 41 6c 67  >baba..Africa/Alg<
000050 69 65 72 73 00 0d 41 66 72 69 63 61 2f 41 73 6d  >iers..Africa/Asm<
000060 61 72 61 00 0d 41 66 72 69 63 61 2f 41 73 6d 65  >ara..Africa/Asme<
000070 72 61 00 0d 41 66 72 69 63 61 2f 42 61 6d 61 6b  >ra..Africa/Bamak<
000080 6f 00 0d 41 66 72 69 63 61 2f 42 61 6e 67 75 69  >o..Africa/Bangui<
000090 00 0d 41 66 72 69 63 61 2f 42 61 6e 6a 75 6c 00  >..Africa/Banjul.<

Oracle Java SE 11

確認した環境

amazonlinux:2.0.20181010 (d656eea421ba)

インストール方法

$ yum install -y jdk-11.0.1_linux-x64_bin.rpm

配置

インストール先は /usr/java の下でした。 alternatives にも対応しているようです。

$ ls -ld /usr/java/jdk-11.0.1
drwxr-xr-x 9 root root 4096 Nov 24 11:27 /usr/java/jdk-11.0.1

$ alternatives --config java

There are 4 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
   1           /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/bin/java
 + 2           /usr/lib/jvm/zulu-8/bin/java
   3           /usr/lib/jvm/zulu-11/bin/java
*  4           /usr/java/jdk-11.0.1/bin/java

Enter to keep the current selection[+], or type selection number: ^C

バージョン情報

特徴的なのは Java(TM) という文字列ですね。

$ /usr/java/jdk-11.0.1/bin/java -version
java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)

cacerts

cacerts に登録されている CA ルート証明書の総数は 93 でした。

Oracle OpenJDK のファイルと完全に一致しています (diff で確認)。

$ ls -l /usr/java/jdk-11.0.1/lib/security/cacerts
-rw-r--r-- 1 root root 102883 Oct  6 21:30 /usr/java/jdk-11.0.1/lib/security/cacerts

$ /usr/java/jdk-11.0.1/bin/keytool -list -cacerts -storepass changeit | head -n 4
Keystore type: JKS
Keystore provider: SUN

Your keystore contains 93 entries

$ diff /usr/lib/jvm/jdk-11.0.1/lib/security/cacerts /usr/java/jdk-11.0.1/lib/security/cacerts

tzdb.dat

tzdata2018e から変換したファイルが配置されていました。

Oracle OpenJDK のファイルと完全に一致しています (diff で確認)。

$ ls -l /usr/java/jdk-11.0.1/lib/tzdb.dat
-rw-r--r-- 1 root root 105882 Oct  6 21:30 /usr/java/jdk-11.0.1/lib/tzdb.dat

$ od -Ax -t x1z /usr/java/jdk-11.0.1/lib/tzdb.dat | head
000000 01 00 04 54 5a 44 42 00 01 00 05 32 30 31 38 65  >...TZDB....2018e<
000010 02 57 00 0e 41 66 72 69 63 61 2f 41 62 69 64 6a  >.W..Africa/Abidj<
000020 61 6e 00 0c 41 66 72 69 63 61 2f 41 63 63 72 61  >an..Africa/Accra<
000030 00 12 41 66 72 69 63 61 2f 41 64 64 69 73 5f 41  >..Africa/Addis_A<
000040 62 61 62 61 00 0e 41 66 72 69 63 61 2f 41 6c 67  >baba..Africa/Alg<
000050 69 65 72 73 00 0d 41 66 72 69 63 61 2f 41 73 6d  >iers..Africa/Asm<
000060 61 72 61 00 0d 41 66 72 69 63 61 2f 41 73 6d 65  >ara..Africa/Asme<
000070 72 61 00 0d 41 66 72 69 63 61 2f 42 61 6d 61 6b  >ra..Africa/Bamak<
000080 6f 00 0d 41 66 72 69 63 61 2f 42 61 6e 67 75 69  >o..Africa/Bangui<
000090 00 0d 41 66 72 69 63 61 2f 42 61 6e 6a 75 6c 00  >..Africa/Banjul.<

$ diff /usr/lib/jvm/jdk-11.0.1/lib/tzdb.dat /usr/java/jdk-11.0.1/lib/tzdb.dat

OpenJDK 8 (AdoptOpenJDK)

確認した環境

amazonlinux:2.0.20181010 (d656eea421ba)

インストール方法

$ curl -L https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u192-b12/OpenJDK8U-jdk_x64_linux_hotspot_8u192b12.tar.gz |
tar xzf - -C /usr/lib/jvm/

配置

配布形式が tar.gz のため、インストール先は任意。 当然 alternatives にも未対応。

$ ls -ld /usr/lib/jvm/jdk8u192-b12
drwxrwxr-x 9 root root 4096 Nov  1 04:41 /usr/lib/jvm/jdk8u192-b12

バージョン情報

特徴的なのは AdoptOpenJDK という文字列ですね。

$ /usr/lib/jvm/jdk8u192-b12/jre/bin/java -version
openjdk version "1.8.0_192"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_192-b12)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.192-b12, mixed mode)

cacerts

cacerts に登録されている CA ルート証明書の総数は 92 でした。

Oracle OpenJDK よりも 1 少ない。

diffJava 11 のリリースノート(JDK-8210432) より、TeliaSoneraルート証明書が不足しているようです。

Jira 課題は JDK-8210432 で解決済みになっています。 バックポートが必要だと思うのですが… あとで報告します。

$ ls -l /usr/lib/jvm/jdk8u192-b12/jre/lib/security/cacerts
-rw-rw-r-- 1 root root 101493 Nov  1 04:41 /usr/lib/jvm/jdk8u192-b12/jre/lib/security/cacerts

$ /usr/lib/jvm/jdk8u192-b12/jre/bin/keytool -list -keystore /usr/lib/jvm/jdk8u192-b12/jre/lib/security/cacerts -storepass changeit | head -n 4
Keystore type: jks
Keystore provider: SUN

Your keystore contains 92 entries

$ diff -u oopenjdk_cacerts.txt adoptopenjdk8_cacerts.txt | grep -E '^[\+\-]'
--- oopenjdk_cacerts.txt    2018-11-24 10:00:11.942617000 +0900
+++ adoptopenjdk8_cacerts.txt   2018-11-24 17:46:05.708039000 +0900
-Your keystore contains 93 entries
+Your keystore contains 92 entries
-addtrustclass1ca [jdk], Dec 1, 2017, trustedCertEntry,
-Certificate fingerprint (SHA1): CC:AB:0E:A0:4C:23:01:D6:69:7B:DD:37:9F:CD:12:EB:24:E3:94:9D
+addtrustclass1ca [jdk], Dec 1, 2017, trustedCertEntry,
+Certificate fingerprint (SHA1): CC:AB:0E:A0:4C:23:01:D6:69:7B:DD:37:9F:CD:12:EB:24:E3:94:9D
-keynectisrootca [jdk], Dec 1, 2017, trustedCertEntry,
-Certificate fingerprint (SHA1): 9C:61:5C:4D:4D:85:10:3A:53:26:C2:4D:BA:EA:E4:A2:D2:D5:CC:97
+keynectisrootca [jdk], Dec 1, 2017, trustedCertEntry,
+Certificate fingerprint (SHA1): 9C:61:5C:4D:4D:85:10:3A:53:26:C2:4D:BA:EA:E4:A2:D2:D5:CC:97
-verisignclass3g3ca [jdk], Dec 1, 2017, trustedCertEntry,
-Certificate fingerprint (SHA1): 13:2D:0D:45:53:4B:69:97:CD:B2:D5:C3:39:E2:55:76:60:9B:5C:C6
-certumtrustednetworkca [jdk], Dec 1, 2017, trustedCertEntry,
-Certificate fingerprint (SHA1): 07:E0:32:E0:20:B7:2C:3F:19:2F:06:28:A2:59:3A:19:A7:0F:06:9E
-teliasonerarootcav1 [jdk], Sep 6, 2018, trustedCertEntry,
-Certificate fingerprint (SHA1): 43:13:BB:96:F1:D5:86:9B:C1:4E:6A:92:F6:CF:F6:34:69:87:82:37
+certumtrustednetworkca [jdk], Dec 1, 2017, trustedCertEntry,
+Certificate fingerprint (SHA1): 07:E0:32:E0:20:B7:2C:3F:19:2F:06:28:A2:59:3A:19:A7:0F:06:9E
+verisignclass3g3ca [jdk], Dec 1, 2017, trustedCertEntry,
+Certificate fingerprint (SHA1): 13:2D:0D:45:53:4B:69:97:CD:B2:D5:C3:39:E2:55:76:60:9B:5C:C6
-globalsigneccrootcar5 [jdk], Jul 13, 2018, trustedCertEntry,
-Certificate fingerprint (SHA1): 1F:24:C6:30:CD:A4:18:EF:20:69:FF:AD:4F:DD:5F:46:3A:1B:69:AA
-ttelesecglobalrootclass2ca [jdk], Jul 13, 2018, trustedCertEntry,
-Certificate fingerprint (SHA1): 59:0D:2D:7D:88:4F:40:2E:61:7E:A5:62:32:17:65:CF:17:D8:94:E9
+globalsigneccrootcar5 [jdk], Jul 13, 2018, trustedCertEntry,
+Certificate fingerprint (SHA1): 1F:24:C6:30:CD:A4:18:EF:20:69:FF:AD:4F:DD:5F:46:3A:1B:69:AA
-digicertglobalrootca [jdk], Dec 1, 2017, trustedCertEntry,
-Certificate fingerprint (SHA1): A8:98:5D:3A:65:E5:E5:C4:B2:D7:D6:6D:40:C6:DD:2F:B1:9C:54:36
+ttelesecglobalrootclass2ca [jdk], Jul 13, 2018, trustedCertEntry,
+Certificate fingerprint (SHA1): 59:0D:2D:7D:88:4F:40:2E:61:7E:A5:62:32:17:65:CF:17:D8:94:E9
+digicertglobalrootca [jdk], Dec 1, 2017, trustedCertEntry,
+Certificate fingerprint (SHA1): A8:98:5D:3A:65:E5:E5:C4:B2:D7:D6:6D:40:C6:DD:2F:B1:9C:54:36

tzdb.dat

tzdata2018e から変換したファイルが配置されていました。

$ ls -l /usr/lib/jvm/jdk8u192-b12/jre/lib/tzdb.dat
-rw-rw-r-- 1 root root 105882 Nov  1 04:41 /usr/lib/jvm/jdk8u192-b12/jre/lib/tzdb.dat

$ od -Ax -tx1z /usr/lib/jvm/jdk8u192-b12/jre/lib/tzdb.dat | head
000000 01 00 04 54 5a 44 42 00 01 00 05 32 30 31 38 65  >...TZDB....2018e<
000010 02 57 00 0e 41 66 72 69 63 61 2f 41 62 69 64 6a  >.W..Africa/Abidj<
000020 61 6e 00 0c 41 66 72 69 63 61 2f 41 63 63 72 61  >an..Africa/Accra<
000030 00 12 41 66 72 69 63 61 2f 41 64 64 69 73 5f 41  >..Africa/Addis_A<
000040 62 61 62 61 00 0e 41 66 72 69 63 61 2f 41 6c 67  >baba..Africa/Alg<
000050 69 65 72 73 00 0d 41 66 72 69 63 61 2f 41 73 6d  >iers..Africa/Asm<
000060 61 72 61 00 0d 41 66 72 69 63 61 2f 41 73 6d 65  >ara..Africa/Asme<
000070 72 61 00 0d 41 66 72 69 63 61 2f 42 61 6d 61 6b  >ra..Africa/Bamak<
000080 6f 00 0d 41 66 72 69 63 61 2f 42 61 6e 67 75 69  >o..Africa/Bangui<
000090 00 0d 41 66 72 69 63 61 2f 42 61 6e 6a 75 6c 00  >..Africa/Banjul.<

OpenJDK 11(AdoptOpenJDK)

確認した環境

amazonlinux:2.0.20181010 (d656eea421ba)

インストール方法

$ curl -L https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.1%2B13/OpenJDK11U-jdk_x64_linux_hotspot_11.0.1_13.tar.gz |
tar xzf - -C /usr/lib/jvm/

配置

配布形式が tar.gz のため、インストール先は任意。 当然 alternatives にも未対応。

$ ls -ld /usr/lib/jvm/jdk-11.0.1+13
drwxrwxr-x 10 root root 4096 Nov 15 19:42 /usr/lib/jvm/jdk-11.0.1+13

バージョン情報

特徴的なのは AdoptOpenJDK という文字列ですね。

$ /usr/lib/jvm/jdk-11.0.1+13/bin/java -version
openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.1+13)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.1+13, mixed mode)

cacerts

cacerts に登録されている CA ルート証明書の総数は 93 でした。

Oracle OpenJDK のファイルと完全に一致しています (diff で確認)。

$ ls -l /usr/java/jdk-11.0.1/lib/security/cacerts
-rw-r--r-- 1 root root 102883 Oct  6 21:30 /usr/java/jdk-11.0.1/lib/security/cacerts

$ /usr/lib/jvm/jdk-11.0.1+13/bin/keytool -list -cacerts -storepass changeit | head -n 4
Keystore type: JKS
Keystore provider: SUN

Your keystore contains 93 entries

$ diff /usr/lib/jvm/jdk-11.0.1/lib/security/cacerts /usr/lib/jvm/jdk-11.0.1+13/lib/security/cacerts

tzdb.dat

tzdata2018e から変換したファイルが配置されていました。

Oracle OpenJDK のファイルとは一致しませんが、内容は変わらないと考えたい (diff で確認)。

$ ls -l /usr/lib/jvm/jdk-11.0.1+13/lib/tzdb.dat
-rw-rw-r-- 1 root root 105882 Nov 15 19:42 /usr/lib/jvm/jdk-11.0.1+13/lib/tzdb.dat

$ od -Ax -t x1z /usr/lib/jvm/jdk-11.0.1+13/lib/tzdb.dat | head
000000 01 00 04 54 5a 44 42 00 01 00 05 32 30 31 38 65  >...TZDB....2018e<
000010 02 57 00 0e 41 66 72 69 63 61 2f 41 62 69 64 6a  >.W..Africa/Abidj<
000020 61 6e 00 0c 41 66 72 69 63 61 2f 41 63 63 72 61  >an..Africa/Accra<
000030 00 12 41 66 72 69 63 61 2f 41 64 64 69 73 5f 41  >..Africa/Addis_A<
000040 62 61 62 61 00 0e 41 66 72 69 63 61 2f 41 6c 67  >baba..Africa/Alg<
000050 69 65 72 73 00 0d 41 66 72 69 63 61 2f 41 73 6d  >iers..Africa/Asm<
000060 61 72 61 00 0d 41 66 72 69 63 61 2f 41 73 6d 65  >ara..Africa/Asme<
000070 72 61 00 0d 41 66 72 69 63 61 2f 42 61 6d 61 6b  >ra..Africa/Bamak<
000080 6f 00 0d 41 66 72 69 63 61 2f 42 61 6e 67 75 69  >o..Africa/Bangui<
000090 00 0d 41 66 72 69 63 61 2f 42 61 6e 6a 75 6c 00  >..Africa/Banjul.<

$ diff /usr/lib/jvm/jdk-11.0.1/lib/tzdb.dat /usr/lib/jvm/jdk-11.0.1+13/lib/tzdb.dat
Binary files /usr/lib/jvm/jdk-11.0.1/lib/tzdb.dat and /usr/lib/jvm/jdk-11.0.1+13/lib/tzdb.dat differ

OpenJDK 8 (Redhat)

確認した環境

$ cat /etc/os-release
NAME="Red Hat Enterprise Linux Server"
VERSION="7.5 (Maipo)"
ID="rhel"
ID_LIKE="fedora"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="7.5"
PRETTY_NAME="Red Hat Enterprise Linux Server 7.5 (Maipo)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:redhat:enterprise_linux:7.5:GA:server"
HOME_URL="https://www.redhat.com/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"

REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 7"
REDHAT_BUGZILLA_PRODUCT_VERSION=7.5
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="7.5"

インストール方法

$ yum install -y java-1.8.0-openjdk-headless

配置

インストール先は /usr/lib/jvm の下でした。 alternatives にも対応しているようです。

$ ls -ld /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64
drwxr-xr-x. 3 root root 17 Nov 24 03:38 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64

$ alternatives --config java

There is 1 program that provides 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/bin/java)

Enter to keep the current selection[+], or type selection number: ^C

バージョン情報

特徴的なところが何もありません。

$ /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/bin/java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

cacerts

cacertsca-certificates パッケージ (Mozilla の CA root certificate bundle)に含まれるファイルを参照するようになっています。

依存パッケージとして管理されているため、更新の手間は軽減できそうです。

キーストアに登録されている CA ルート証明書の総数は 133 でした。 おそらく、Mozilla の CA ルート証明書から生成しているのではないかと思います (簡単に確認する方法が思いつかなかった…)。

$ ls -l /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/lib/security/cacerts
lrwxrwxrwx. 1 root root 41 Nov 24 03:38 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/lib/security/cacerts -> ../../../../../../../etc/pki/java/cacerts

$ ls -l /etc/pki/java/cacerts
lrwxrwxrwx. 1 root root 40 Nov 17 02:38 /etc/pki/java/cacerts -> /etc/pki/ca-trust/extracted/java/cacerts

$ ls -l /etc/pki/ca-trust/extracted/java/cacerts
-r--r--r--. 1 root root 160286 Nov 17 02:38 /etc/pki/ca-trust/extracted/java/cacerts

$ yum provides /etc/pki/ca-trust/extracted/java/cacerts
Failed to set locale, defaulting to C
Loaded plugins: product-id, search-disabled-repos, subscription-manager
Repo rhel-7-server-rpms forced skip_if_unavailable=True due to: /etc/pki/entitlement/2829246006869238773-key.pem
ca-certificates-2013.1.95-71.el7.noarch : The Mozilla CA root certificate bundle
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts



ca-certificates-2014.1.98-70.0.el7_0.noarch : The Mozilla CA root certificate bundle
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts



ca-certificates-2014.1.98-72.el7.noarch : The Mozilla CA root certificate bundle
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts



ca-certificates-2015.2.4-70.0.el7_1.noarch : The Mozilla CA root certificate bundle
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts



ca-certificates-2015.2.4-71.el7.noarch : The Mozilla CA root certificate bundle
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts



ca-certificates-2015.2.6-70.1.el7_2.noarch : The Mozilla CA root certificate bundle
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts



ca-certificates-2015.2.6-73.el7.noarch : The Mozilla CA root certificate bundle
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts



ca-certificates-2017.2.11-70.1.el7_3.noarch : The Mozilla CA root certificate bundle
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts



ca-certificates-2017.2.14-70.1.el7_3.noarch : The Mozilla CA root certificate bundle
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts



ca-certificates-2017.2.14-71.el7.noarch : The Mozilla CA root certificate bundle
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts



ca-certificates-2017.2.20-71.el7.noarch : The Mozilla CA root certificate bundle
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts



ca-certificates-2018.2.22-70.0.el7_5.noarch : The Mozilla CA root certificate bundle
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts



ca-certificates-2017.2.20-71.el7.noarch : The Mozilla CA root certificate bundle
Repo        : @anaconda/7.5
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts

$ yum deplist java-1.8.0-openjdk-headless | grep ca-certificates
Failed to set locale, defaulting to C
  dependency: ca-certificates
   provider: ca-certificates.noarch 2018.2.22-70.0.el7_5
  dependency: ca-certificates
   provider: ca-certificates.noarch 2018.2.22-70.0.el7_5

$ usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/bin/keytool -list -keystore /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/lib/security/cacerts -storepass changeit | head -n 4
Keystore type: jks
Keystore provider: SUN

Your keystore contains 133 entries

$ grep -c "BEGIN CERTIFICATE" /etc/pki/tls/cert.pem
133

tzdb.dat

tzdb.dattzdata-java パッケージに含まれるファイルを参照するようになっています。

依存パッケージとして管理されているため、更新の手間は軽減できそうです。

2018/11/24 時点では tzdata2018g から変換したファイルが配置されていました。

$ ls -l /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/lib/tzdb.dat
lrwxrwxrwx. 1 root root 30 Nov 24 03:38 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/lib/tzdb.dat -> /usr/share/javazi-1.8/tzdb.dat

$ ls -l /usr/share/javazi-1.8/tzdb.dat
-rw-r--r--. 1 root root 105734 Oct 29 14:27 /usr/share/javazi-1.8/tzdb.dat

$ yum provides /usr/share/javazi-1.8/tzdb.dat
Failed to set locale, defaulting to C
Loaded plugins: product-id, search-disabled-repos, subscription-manager
epel/x86_64/filelists                                                                                                                                          |  10 MB  00:00:01
rhel-7-server-rpms/7Server/x86_64/filelists_db                                                                                                                 |  37 MB  00:00:03
tzdata-java-2015e-1.el7.noarch : Timezone data for Java
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /usr/share/javazi-1.8/tzdb.dat
(省略)

$ yum deplist java-1.8.0-openjdk-headless | grep tzdata-java
Failed to set locale, defaulting to C
  dependency: tzdata-java >= 2015d
   provider: tzdata-java.noarch 2018g-1.el7
  dependency: tzdata-java >= 2015d
   provider: tzdata-java.noarch 2018g-1.el7

$ od -Ax -t x1z /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/lib/tzdb.dat | head
000000 01 00 04 54 5a 44 42 00 01 00 05 32 30 31 38 67  >...TZDB....2018g<
000010 02 57 00 0e 41 66 72 69 63 61 2f 41 62 69 64 6a  >.W..Africa/Abidj<
000020 61 6e 00 0c 41 66 72 69 63 61 2f 41 63 63 72 61  >an..Africa/Accra<
000030 00 12 41 66 72 69 63 61 2f 41 64 64 69 73 5f 41  >..Africa/Addis_A<
000040 62 61 62 61 00 0e 41 66 72 69 63 61 2f 41 6c 67  >baba..Africa/Alg<
000050 69 65 72 73 00 0d 41 66 72 69 63 61 2f 41 73 6d  >iers..Africa/Asm<
000060 61 72 61 00 0d 41 66 72 69 63 61 2f 41 73 6d 65  >ara..Africa/Asme<
000070 72 61 00 0d 41 66 72 69 63 61 2f 42 61 6d 61 6b  >ra..Africa/Bamak<
000080 6f 00 0d 41 66 72 69 63 61 2f 42 61 6e 67 75 69  >o..Africa/Bangui<
000090 00 0d 41 66 72 69 63 61 2f 42 61 6e 6a 75 6c 00  >..Africa/Banjul.<

OpenJDK 11 (Redhat)

確認した環境

$ cat /etc/os-release
NAME="Red Hat Enterprise Linux Server"
VERSION="7.5 (Maipo)"
ID="rhel"
ID_LIKE="fedora"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="7.5"
PRETTY_NAME="Red Hat Enterprise Linux Server 7.5 (Maipo)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:redhat:enterprise_linux:7.5:GA:server"
HOME_URL="https://www.redhat.com/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"

REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 7"
REDHAT_BUGZILLA_PRODUCT_VERSION=7.5
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="7.5"

インストール方法

$ yum install -y java-11-openjdk-headless

配置

インストール先は /usr/java の下でした。 alternatives にも対応しているようです。

$ ls -ld /usr/lib/jvm/java-11-openjdk-11.0.1.13-3.el7_6.x86_64
drwxr-xr-x. 6 root root 68 Nov 24 03:58 /usr/lib/jvm/java-11-openjdk-11.0.1.13-3.el7_6.x86_64

$ alternatives --config java

There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/bin/java)
   2           java-11-openjdk.x86_64 (/usr/lib/jvm/java-11-openjdk-11.0.1.13-3.el7_6.x86_64/bin/java)

Enter to keep the current selection[+], or type selection number: ^C

バージョン情報

Oracle OpenJDK と完全に一致しています。

/usr/lib/jvm/java-11-openjdk-11.0.1.13-3.el7_6.x86_64/bin/java -version
openjdk version "11.0.1" 2018-10-16 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.1+13-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode, sharing)

cacerts

cacertsca-certificates パッケージ (Mozilla の CA root certificate bundle)に含まれるファイルを参照するようになっています。

依存パッケージとして管理されているため、更新の手間は軽減できそうです。

キーストアに登録されている CA ルート証明書の総数は 133 でした。 おそらく、Mozilla の CA ルート証明書から生成しているのではないかと思います (簡単に確認する方法が思いつかなかった…)。

$ ls -l /usr/lib/jvm/java-11-openjdk-11.0.1.13-3.el7_6.x86_64/lib/security/cacerts
lrwxrwxrwx. 1 root root 21 Nov 24 03:58 /usr/lib/jvm/java-11-openjdk-11.0.1.13-3.el7_6.x86_64/lib/security/cacerts -> /etc/pki/java/cacerts

$ yum deplist java-11-openjdk-headless | grep ca-certificates
Failed to set locale, defaulting to C
  dependency: ca-certificates
   provider: ca-certificates.noarch 2018.2.22-70.0.el7_5
  dependency: ca-certificates
   provider: ca-certificates.noarch 2018.2.22-70.0.el7_5

$ /usr/lib/jvm/java-11-openjdk-11.0.1.13-3.el7_6.x86_64/bin/keytool -list -cacerts -storepass changeit | head -n 4
Keystore type: JKS
Keystore provider: SUN

Your keystore contains 133 entries

tzdb.dat

tzdb.dattzdata-java パッケージに含まれるファイルを参照するようになっています。

依存パッケージとして管理されているため、更新の手間は軽減できそうです。

2018/11/24 時点では tzdata2018g から変換したファイルが配置されていました。

$ ls -l /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/lib/tzdb.dat
lrwxrwxrwx. 1 root root 30 Nov 24 03:38 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/lib/tzdb.dat -> /usr/share/javazi-1.8/tzdb.dat

$ yum deplist java-11-openjdk-headless | grep tzdata-java | head -n 10
Failed to set locale, defaulting to C
  dependency: tzdata-java >= 2015d
   provider: tzdata-java.noarch 2018g-1.el7
  dependency: tzdata-java >= 2015d
   provider: tzdata-java.noarch 2018g-1.el7

$ od -Ax -t x1z /usr/lib/jvm/java-11-openjdk-11.0.1.13-3.el7_6.x86_64/lib/tzdb.dat  | head
000000 01 00 04 54 5a 44 42 00 01 00 05 32 30 31 38 67  >...TZDB....2018g<
000010 02 57 00 0e 41 66 72 69 63 61 2f 41 62 69 64 6a  >.W..Africa/Abidj<
000020 61 6e 00 0c 41 66 72 69 63 61 2f 41 63 63 72 61  >an..Africa/Accra<
000030 00 12 41 66 72 69 63 61 2f 41 64 64 69 73 5f 41  >..Africa/Addis_A<
000040 62 61 62 61 00 0e 41 66 72 69 63 61 2f 41 6c 67  >baba..Africa/Alg<
000050 69 65 72 73 00 0d 41 66 72 69 63 61 2f 41 73 6d  >iers..Africa/Asm<
000060 61 72 61 00 0d 41 66 72 69 63 61 2f 41 73 6d 65  >ara..Africa/Asme<
000070 72 61 00 0d 41 66 72 69 63 61 2f 42 61 6d 61 6b  >ra..Africa/Bamak<
000080 6f 00 0d 41 66 72 69 63 61 2f 42 61 6e 67 75 69  >o..Africa/Bangui<
000090 00 0d 41 66 72 69 63 61 2f 42 61 6e 6a 75 6c 00  >..Africa/Banjul.<