jks 签名命令


有时您没有PKI,但仍需要密钥和相应的证书来签名(在TLS上下文之外)。 在最初生成的jks文件中的证书过期后,您几乎没有选择–生成全新的密钥对,或以某种方式“扩展”现有证书。 这对大多数测试和内部系统很有用,但仍然值得一提。

扩展证书通常是不可能的–一旦过期,就完成了。 但是,您可以拥有具有相同私钥和更长期限的新证书。 这听起来像应该容易做的事情,但是事实证明,使用keytool并不是那么容易。 即使使用我最喜欢的工具keystore Explorer ,也无法立即实现。

为了重用私钥以拥有更长的新证书,您需要执行以下操作:

  1. 导出私钥( 使用keytool和openssl或通过keystore-explorer UI进行,这要简单得多)
  2. 发出证书签名请求( 使用keytool或通过keystore-explorer UI)
  3. 使用私钥(即自签名)对请求进行签名
  4. 将证书导入商店中以替换旧的(过期的)证书

对于keytool或keystore exporer,最后两个步骤似乎并不简单。 如果您尝试使用现有的密钥库密钥对对请求进行签名,则将当前证书用作链的根(并且您不希望这样做)。 而且您无法删除证书并生成新证书。

因此,您需要使用OpenSSL:

x509 -req -days 3650 - in req.csr -signkey private.key -sha256 -extfile extfile.cnf -out result.crt

extfile.cnf是可选的,如果要指定扩展名,则使用extfile.cnf。 例如,为时间戳记,扩展文件如下所示:

extendedKeyUsage=critical,timeStamping

之后,“简单地”创建一个新的密钥库,并导入私钥和新生成的证书。 通过keystore-explorer UI可以直接实现,而通过命令行则不那么容易

您已经注意到我更喜欢keytool-explorer。 与像keytool和openssl这样的命令行工具相比,它是使键和密钥库的使用变得容易且可预测的好工具,我敢肯定,没有人会使用Google的每条命令。 当然,如果您必须执行非常具体或奇怪的事情,则必须恢复到命令行,但是对于大多数操作而言,UI足以满足要求(除非您必须使其自动化,在这种情况下,显然,请使用CLI) 。

您几乎不需要做我上面显示的操作,但是如果需要,我希望上面的提示有用。

翻译自: https://www.javacodegeeks.com/2019/05/jks-extending-self-signed-certificate.html

jks 签名命令