java 密钥库 CA 证书有效期扩展

java keystore CA certificate validity extension

我有一个今年到期的 CA 证书。我的 key.jks 文件列表如下。

inter, Dec 17, 2019, trustedCertEntry,
....
root, Dec 17, 2019, trustedCertEntry,
....
app.domain.com, Dec 29, 2019, PrivateKeyEntry,

为了延长有效性,我提供了与去年相同的 CSR 文件。现在我有 inter、root 和域名的新 3 个 crt 文件。

现在我尝试通过

删除旧条目
keytool -delete -alias inter -keystore key.jks -storepass pword
keytool -delete -alias root -keystore key.jks -storepass pword
keytool -delete -alias app.domain.com -keystore key.jks -storepass pword

并导入了新的证书文件,如

keytool -import -alias inter -file intermediate.crt -keystore key.jks -storepass pword
keytool -import -alias root -file TrustedRoot.crt -keystore key.jks -storepass pword
keytool -import -alias app.domain.com -file app_domain_com.crt -keystore key.jks -storepass pword

现在 keytool -list 不显示 app_domain_com.crt 的 PrivateKeyEntry 并且应用程序未启动。

inter, Dec 15, 2020, trustedCertEntry,
....
root, Dec 15, 2020, trustedCertEntry,
....
app.doamin.com, Dec 15, 2020, trustedCertEntry,

我有 ADFS SSO 集成,并希望避免因为此证书更改而对其进行更改。

您的第三个删除命令也删除了您的私钥。这就是您的应用程序损坏的原因,您需要您的私钥才能使 SSL 正常工作。

当你说你想重复使用上次使用的相同 CSR 时,这意味着你打算使用相同的私钥,但你删除了它。这就是为什么您在删除和导入后将它们视为不同类型的原因。在您的第一个密钥工具 list 中,您将 app.domain.com 作为 PrivateKeyEntry(包含私钥和证书),但是在删除并导入证书后,您将 app.domain.com 作为 TrustedCertEntry(仅证书).如果您没有删除私钥,导入命令会将新证书与其相关联,因为找不到私钥,它只是添加证书。

在您的情况下,您应该完成以下步骤:

  1. 不是运行第三个删除命令
  2. 使用 keytool 的 -importcert 命令导入新证书并与现有私钥相关联。

可以找到尝试重用与上次相同的 CSR 时需要考虑的事项 here, here and here

P.S:希望您已经备份了您的原始密钥库。