新手keytool命令 – 如何更新已添加到密钥库的证书?

我的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 already exists.

我认为问题是我不能使用相同的keytool命令。 我需要使用另一个不将证书添加到密钥库的证书,但是使用更新的版本更新证书。 任何人都能指出我正确的指挥方向吗?

顺便说一句,是否有一些我缺少的自动化流程? 也就是说,cert一直过期……这是否意味着IT管理员需要始终使用这样的代码手动使用新证书更新密钥库? 或者,这可以以某种方式自动化吗?

可能最简单的方法是让keytool删除原始证书并生成具有相同信息的新证书。 解决这个问题的一个好方法是,如果你有一个小型虚拟机可以安装它,那就是安装EJBCA。 它有点笨重,但EJBCA是一个用Java编写的免费开源CA服务器。 您可以创建自己的假CA证书,用户证书,服务器证书等,这些证书都具有信任链。 此外,当您在证书过期后重新颁发证书时,可以快速为您生成新的JKS文件。

删除:

keytool -delete -keystore myfile.jks -alias 'alias_from_keytool_-list'