我的linux电子邮件服务器exim的自签名证书。为了使我的Java函数能够通过GlassFish访问这个电子邮件服务器,我最初发布了:
# keytool -importcert -v -noprompt -alias mail.mycompany.com -file /path/to/mail.mycompany.com.der -keystore /path/to/config/cacerts.jks -storepass changeit
Certificate was added to keystore
这项工作正常,直到证书过期。我不得不创建一个新的自签名证书,现在Java给出了错误PKIX path validation failed … path does not chain with any of the trust anchors
。
为了尝试解决这个问题,我从新的exim证书中派生了一个新的mail.mycompany.com.der
文件(最初完成)。但是当我发出上面的keytool命令(最初完成)时,它会给出错误Certificate not imported, alias <mail.mycompany.com> already exists.
我认为问题在于我无法使用相同的keytool命令。我需要使用另一个不将证书添加到密钥库的证书,但是使用更新的版本更新已经存在的证书。任何人都可以指出我正确的指挥方向吗?
顺便说一句,是否有一些我缺少的自动化流程?也就是说,cert一直过期......这是否意味着IT管理员需要始终使用这样的代码手动使用新证书更新密钥库?或者,这可以以某种方式自动化吗?
答案 0 :(得分:27)
最简单的方法可能是让keytool删除原始证书并生成具有相同信息的新证书。解决这个问题的一个好方法是,如果你有一个小型虚拟机可以安装EJBCA。它有点笨重,但EJBCA是一个用Java编写的免费开源CA服务器。您可以创建自己的假CA证书,用户证书,服务器证书等,这些证书都具有信任链。此外,当您在证书过期后重新颁发证书时,可以快速为您生成新的JKS文件。
要删除:
keytool -delete -keystore myfile.jks -alias 'alias_from_keytool_-list'