如何在请求中创建没有任何 Attributes/Requested 扩展的 CSR - Keytool
How to create CSR without any Attributes/Requested Extensions within request - Keytool
是否有可能使用 java keyTool 生成不包含任何属性(例如 "Requested Extensions" 或任何相关扩展嵌入信息)的证书签名请求?
我刚开始使用 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
生成 new 密钥库后,我还需要删除一些过期的 "trustedCertEntry" 别名,因此我从 [=] 导出了所有有效的 "trustedCertEntry" 证书39=]旧的 密钥库并将它们导入新的。
现在,此时我需要生成 CSR 并让客户签名,因为当您生成新的密钥库和 "PrivateKeyEntry" 时,它是自签名的。
我可以使用以下命令轻松生成 CSR:
keytool -certreq -alias example-prod-client-ssl -file certreq_v2-02112019.csr -keystore example-prod-client-ssl.jks
但是,当我使用在线工具解析CSR时,我发现它在请求中包含一些属性信息,即"Requested Extensions":
所以我的主要问题是,我怎样才能使属性部分为空?
过去,我看到在 2014 年我们必须与客户执行相同的流程,当我在 old 密钥库上执行 CSR(作为测试)时,我仍然拥有与我的 new CSR 请求完全相同的属性。但是客户不希望包含这些内容,因为这会导致他们一方出错。
此外,最后一个发送给客户的 old 密钥库的 CSR 请求(不是我执行的 - 在 2014 年完成,但我有一份此 CSR 文件)不包含此属性信息,仅具有十六进制值 "a0:00":
所以,我相信它与我的 CSR 请求隔离,而不是 new 密钥库创建本身,因为当我在 old[=46] 上生成 CSR 时=] 密钥库(我仍然可以使用)它还包含这些属性请求的扩展。
我试过在我的“-certreq”命令中添加“-ext”来尝试抑制或插入一个空的属性部分(因为我相信如果我不使用“-ext”参数,“- certreq”命令将默认,这就是我遇到当前问题的原因),但我没有成功。
如果您使用 Java JDK 1.6 或更低版本,则可以解决此问题。我当前的 VM 是 运行 JDK 10.0.2,因此它会自动填充 CSR 中的属性请求扩展 X509V3 SubjectKeyIdentifier。我刚刚将密钥库文件复制到我使用 JDK 1.6 的旧 VM,CSR 正在按我想要的方式生成,没有任何问题。
是否有可能使用 java keyTool 生成不包含任何属性(例如 "Requested Extensions" 或任何相关扩展嵌入信息)的证书签名请求?
我刚开始使用 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
生成 new 密钥库后,我还需要删除一些过期的 "trustedCertEntry" 别名,因此我从 [=] 导出了所有有效的 "trustedCertEntry" 证书39=]旧的 密钥库并将它们导入新的。
现在,此时我需要生成 CSR 并让客户签名,因为当您生成新的密钥库和 "PrivateKeyEntry" 时,它是自签名的。
我可以使用以下命令轻松生成 CSR:
keytool -certreq -alias example-prod-client-ssl -file certreq_v2-02112019.csr -keystore example-prod-client-ssl.jks
但是,当我使用在线工具解析CSR时,我发现它在请求中包含一些属性信息,即"Requested Extensions":
所以我的主要问题是,我怎样才能使属性部分为空?
过去,我看到在 2014 年我们必须与客户执行相同的流程,当我在 old 密钥库上执行 CSR(作为测试)时,我仍然拥有与我的 new CSR 请求完全相同的属性。但是客户不希望包含这些内容,因为这会导致他们一方出错。
此外,最后一个发送给客户的 old 密钥库的 CSR 请求(不是我执行的 - 在 2014 年完成,但我有一份此 CSR 文件)不包含此属性信息,仅具有十六进制值 "a0:00":
所以,我相信它与我的 CSR 请求隔离,而不是 new 密钥库创建本身,因为当我在 old[=46] 上生成 CSR 时=] 密钥库(我仍然可以使用)它还包含这些属性请求的扩展。
我试过在我的“-certreq”命令中添加“-ext”来尝试抑制或插入一个空的属性部分(因为我相信如果我不使用“-ext”参数,“- certreq”命令将默认,这就是我遇到当前问题的原因),但我没有成功。
如果您使用 Java JDK 1.6 或更低版本,则可以解决此问题。我当前的 VM 是 运行 JDK 10.0.2,因此它会自动填充 CSR 中的属性请求扩展 X509V3 SubjectKeyIdentifier。我刚刚将密钥库文件复制到我使用 JDK 1.6 的旧 VM,CSR 正在按我想要的方式生成,没有任何问题。