我已将内部证书颁发机构导入Java的CA密钥库。 (使用keytool导入到“cacerts”存储)这工作正常,并保持,直到我更新Java RPM。 在这一点上,所有这些import证书都不会转交给新的安装。 所以当试图build立SSL连接时,应用程序就会popup。
有没有办法通过Java升级来使这些证书持续存在? 或者在升级触发器上重新运行导入命令的简单方法? 我明显可以将这些命令编写到我的升级过程中,但我希望有一个更优雅的解决scheme。
作为参考,这是一个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
2)安装更新(百胜更新或其他方式)。
3)恢复:
[ -f /tmp/cacerts ] && cp -p /tmp/cacerts $cacertsfile