官方 OpenJDK 27.0.1.0.3 在 2026-10-24 放出。对照本机已有的 27.0.1+9(2026-10-20):默认 cacerts 少了 4 张根证书(eMudhra 三张 + Comodo AAA 一张),别名全部查不到;时区库从 tzdata 2026c 升到 2026e,America/Winnipeg 在 2026-11-01 02:00 之后不再回拨到 -06:00。
这两点都能在 Linux x64 官方包上直接打出来。安全修复 CVE 细节未公开,本文只核验 release notes 写明的公开变更。
测了哪两个包
新包来自 jdk.java.net/27 的 Linux/x64 GA;对照是本机先前装好的 27.0.1+9-62(10 月 CPU 那一轮)。版本串如下:
# 27.0.1.0.3(本次,2026-10-24 / 版本日 2026-10-25)
openjdk version "27.0.1.0.3" 2026-10-25
OpenJDK Runtime Environment (build 27.0.1.0.3+1-2)
OpenJDK 64-Bit Server VM (build 27.0.1.0.3+1-2, mixed mode, sharing)
# 对照:27.0.1+9(2026-10-20)
openjdk version "27.0.1" 2026-10-20
OpenJDK Runtime Environment (build 27.0.1+9-62)
OpenJDK 64-Bit Server VM (build 27.0.1+9-62, mixed mode, sharing)
Release Notes 写明:含 IANA tzdata 2026e;以及 JDK-8395690(not public)从 cacerts 移除下列根证书:
emsigneccrootcag3 [jdk] # CN=emSign ECC Root CA - G3, O=eMudhra Technologies Limited
emsignrootcag1 [jdk] # CN=emSign Root CA - G1, O=eMudhra Technologies Limited
emsignrootcag2 [jdk] # CN=emSign Root CA - G2, O=eMudhra Technologies Limited
comodoaaaca [jdk] # CN=AAA Certificate Services, O=Comodo CA Limited
和早前写过的 eMudhra 中间证书在默认信任库里仍被放行 不是同一层:那篇盯的是中间 CA 与各发行版 truststore 差异;这次是官方 GA 直接从 JDK 自带 cacerts 抽掉根证书别名。
cacerts:110 → 106,四个别名全没了
用 KeyStore 读 $JAVA_HOME/lib/security/cacerts(口令默认 changeit),按 release notes 里的四个 alias 逐个 containsAlias:
# 27.0.1+9
java.version=27.0.1
java.runtime.version=27.0.1+9-62
totalAliases=110
aliasPresent emsigneccrootcag3 [jdk] true
aliasPresent emsignrootcag1 [jdk] true
aliasPresent emsignrootcag2 [jdk] true
aliasPresent comodoaaaca [jdk] true
# 27.0.1.0.3
java.version=27.0.1.0.3
java.runtime.version=27.0.1.0.3+1-2
totalAliases=106
aliasPresent emsigneccrootcag3 [jdk] false
aliasPresent emsignrootcag1 [jdk] false
aliasPresent emsignrootcag2 [jdk] false
aliasPresent comodoaaaca [jdk] false
keytool -list -cacerts 侧也一致:旧包能 grep 到上述四行,新包一条都没有。总数正好少 4。
顺手看了同机的 27+35-2325:这四个 alias 仍在,总数 111。所以「根证书被抽掉」是 27.0.1.0.3 这一刀,不是 27.0.1+9 已经做过的事。
tzdata 2026e:Winnipeg 冬令时不再回拨
ZoneRulesProvider.getVersions("America/Winnipeg"):旧包是 2026c,新包是 2026e。IANA 2026e 的要点是 Manitoba 在 2026-10-31 起永久停在 UTC−05(库里临时建模成 2026-11-01 02:00)。同机跑一组本地时间:
# 27.0.1+9(tzdata 2026c)
2026-11-01T01:59:00 -> 2026-11-01T01:59-05:00[America/Winnipeg] offset=-05:00
2026-11-01T02:00:00 -> 2026-11-01T02:00-06:00[America/Winnipeg] offset=-06:00
2027-01-15T12:00:00 -> 2027-01-15T12:00-06:00[America/Winnipeg] offset=-06:00
2027-07-15T12:00:00 -> 2027-07-15T12:00-05:00[America/Winnipeg] offset=-05:00
# 27.0.1.0.3(tzdata 2026e)
2026-11-01T01:59:00 -> 2026-11-01T01:59-05:00[America/Winnipeg] offset=-05:00
2026-11-01T02:00:00 -> 2026-11-01T02:00-05:00[America/Winnipeg] offset=-05:00
2027-01-15T12:00:00 -> 2027-01-15T12:00-05:00[America/Winnipeg] offset=-05:00
2027-07-15T12:00:00 -> 2027-07-15T12:00-05:00[America/Winnipeg] offset=-05:00
差别就在「入冬还回不回拨」。旧包 11-01 02:00 起回到 -06,2027 年 1 月仍是 -06;新包从 02:00 起一直停在 -05,2027 年 1 月和 7 月都是 -05。
America/Inuvik 也能看出差异(NWT 永久 -06 的建模):旧包 2027-01-15 是 -07,新包是 -06。排程、对账、跨区会议若写死了「Winnipeg 冬天一定是 CST −06」,升到 27.0.1.0.3 后会偏一小时。
怎么自己核
探针就是两段纯 JDK 代码:读 cacerts 的四个 alias,以及打印 ZoneId 偏移。编译运行:
javac -d out src/main/java/demo/*.java
java -cp out demo.CacertsProbe
java -cp out demo.TzProbe
CacertsProbe 核心是:
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
try (FileInputStream in = new FileInputStream(javaHome + "/lib/security/cacerts")) {
ks.load(in, "changeit".toCharArray());
}
for (String alias : List.of(
"emsigneccrootcag3 [jdk]",
"emsignrootcag1 [jdk]",
"emsignrootcag2 [jdk]",
"comodoaaaca [jdk]")) {
System.out.println("aliasPresent\t" + alias + "\t" + ks.containsAlias(alias));
}
TzProbe 核心是:
System.out.println("tzdata.America/Winnipeg="
+ ZoneRulesProvider.getVersions("America/Winnipeg").lastEntry().getKey());
ZoneId winnipeg = ZoneId.of("America/Winnipeg");
for (String s : List.of(
"2026-11-01T01:59:00", "2026-11-01T02:00:00",
"2027-01-15T12:00:00", "2027-07-15T12:00:00")) {
var zdt = LocalDateTime.parse(s).atZone(winnipeg);
System.out.println(s + " -> " + zdt + " offset=" + zdt.getOffset());
}
同机再跑一遍 27.0.1+9,就能得到上面那组对照。
和 27.0.1 那篇的关系
10 月 CPU 的 HttpServer Host 校验 测的是 27.0.1+9。本次是同家族的后续小版本 27.0.1.0.3+1:公开变更就是根证书剔除和 tzdata 2026e。Release notes 提醒下一轮 Critical Patch Update 计划在 2026-11-17,这版不宜当作长期终点。
一起交流
分享你的思考,让讨论更进一步。