如何在请求中没有任何属性/请求的扩展的情况下创建CSR-Keytool

时间:2019-02-25 16:58:09

标签: certificate x509certificate keytool csr

是否可以使用不包含任何属性(例如“请求的扩展名”或任何相关的扩展名嵌入信息)的java keyTool生成证书签名请求?

我不熟悉使用keytool,并且正在与希望我们生成不包含属性信息的CSR的客户打交道。

一些背景信息是我的密钥库中的私钥已过期,这导致我像以前一样使用相同的别名“ PrivateKeyEntry”生成一个新的密钥库(当然,这是一个示例,我已经更改了密钥库“ PrivateKeyEntry”的名称和别名):

keytool -keystore example-prod-client-ssl.jks -genkey -alias example-prod-client-ssl -storetype JKS -keysize 2048 -keyalg RSA -sigalg SHA1WithRSA

生成密钥库后,我还需要删除一些过期的“ trustedCertEntry”别名,因此我从密钥库中导出了所有有效的“ trustedCertEntry”证书并导入了他们进入新的。

现在,在这一点上,我需要生成CSR并具有客户签名,因为当您生成新的密钥库和“ PrivateKeyEntry”时,它是自签名的。

我可以使用以下命令轻松生成CSR:

keytool -certreq -alias example-prod-client-ssl -file certreq_v2-02112019.csr -keystore example-prod-client-ssl.jks

但是,当我使用在线工具解析CSR时,可以看到它在请求中包含一些属性信息,即“请求的扩展”: enter image description here

所以我的主要问题是,如何使Attribute部分为空?

过去,我看到2014年我们必须与客户执行相同的过程,而当我在密钥库上执行CSR(作为测试)时,我仍然拥有与我的 CSR请求完全相同。但是客户不希望包含这些内容,因为这会导致他们一方出错。

此外,发送给客户的密钥库的最新CSR请求(不是我执行的-2014年完成,但是我有此CSR文件的副本)不包含此属性信息,仅具有十六进制值“ a0:00”: enter image description here

因此,我认为它与我的CSR请求是隔离的,而不是对 new 密钥库创建本身的隔离,因为当我在 old 密钥库上生成CSR时(仍可供我使用) ),它还包含这些Atttribute请求的扩展名。

我自欺欺人地在“ -certreq”命令中添加“ -ext”,以尝试抑制或插入空的“属性”部分(因为我相信如果不使用“ -ext”参数,则“ -certreq”命令将默认设置,这就是我遇到当前问题的原因),但我没有成功。

1 个答案:

答案 0 :(得分:0)

如果使用Java JDK 1.6或更低版本,则可以解决此问题。我当前的VM正在运行JDK 10.0.2,因此它会自动在CSR中填充属性请求的扩展X509V3 SubjectKeyIdentifier。我只是将密钥库文件复制到了JDK 1.6所拥有的旧VM上,CSR可以毫无问题地生成我想要的方式。