通过 Java 升级保留导入的 CA 证书

Chr*_*rel 5 linux redhat java

我已将内部证书颁发机构导入 Java 的 CA 密钥库。(使用 keytool 导入“cacerts”商店)这很好用,直到我更新 Java RPM。此时,所有这些导入的证书都不会转移到新安装中。因此,当尝试建立 SSL 连接时,应用程序会爆炸。

有没有办法通过 Java 升级使这些证书持久化?或者在升级触发器上重新运行导入命令的简单方法?我显然可以将这些命令编写到我的升级过程中,但我希望有一个更优雅的解决方案。

作为参考,这是 RHEL 5.10 等效版本(技术上为 Oracle Linux)。我正在通过官方存储库使用 java-1.7.0-openjdk,并且刚刚升级到 U65。

DTK*_*DTK 5

将特定于站点或特定于主机的密钥存储/信任存储保留在 java 安装目录之外可能会有所帮助,而是在需要消耗信任时指向它。假设您的信任存储位于/opt/site/cacerts.JKS,您可以通过以下两种方式之一执行此操作:

在您的 Java 代码中,添加如下行: System.setProperty("javax.net.ssl.trustStore","/opt/site/cacerts.JKS");

在运行时,将定义添加到启动脚本中: java -D'javax.net.ssl.trustStore'="/opt/site/cacerts.JKS" /opt/site/myClass.class

  • 有趣的工作。缺点是,作为 java 升级的一部分,您永远不会获得证书存储更新(例如:新 CA)。但它确实解决了我的问题。 (2认同)

ton*_*ioc 2

我的方式(也许不是最好的?):在升级之前保存cacerts并在升级之后恢复,我在更新脚本中编写了如下脚本:

1)保存:

javaexe=`readlink -f  /usr/bin/java`
jredir=`dirname $javaexe`
cacertsfile=${jredir}/../lib/security/cacerts
[ -f $cacertsfile ] && cp -p $cacertsfile /tmp/cacerts
Run Code Online (Sandbox Code Playgroud)

2)安装更新(yum update或其他方式)。

3)恢复:

[ -f /tmp/cacerts ] && cp -p /tmp/cacerts $cacertsfile
Run Code Online (Sandbox Code Playgroud)