我已将内部证书颁发机构导入 Java 的 CA 密钥库。(使用 keytool 导入“cacerts”商店)这很好用,直到我更新 Java RPM。此时,所有这些导入的证书都不会转移到新安装中。因此,当尝试建立 SSL 连接时,应用程序会爆炸。
有没有办法通过 Java 升级使这些证书持久化?或者在升级触发器上重新运行导入命令的简单方法?我显然可以将这些命令编写到我的升级过程中,但我希望有一个更优雅的解决方案。
作为参考,这是 RHEL 5.10 等效版本(技术上为 Oracle Linux)。我正在通过官方存储库使用 java-1.7.0-openjdk,并且刚刚升级到 U65。
将特定于站点或特定于主机的密钥存储/信任存储保留在 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
我的方式(也许不是最好的?):在升级之前保存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)