首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么"keytool.exe“和"-certreq”arg需要别名?

为什么"keytool.exe“和"-certreq”arg需要别名?
EN

Security用户
提问于 2018-11-05 16:25:54
回答 2查看 320关注 0票数 1

我使用"keytool.exe“JDK实用程序来尝试使用"-certreq”arg创建一个CSR (证书签名请求)。我想知道为什么这需要一个别名(即keystore中的另一个证书),而我还没有从CA (我将向其发送CSR)获得证书。我知道它可以用来与签名证书w/现有的密钥对/自签名证书结婚,但我想做的是(创建一个新的证书):

  1. 生成要发送到CA ("-certreq“arg)的CSR。
  2. 在收到签名证书后,会生成一个新的密钥对("-genkeypair arg“)”w/新别名。
  3. 从#2中导入针对该别名的新证书。

我的论点是,我不应该需要一个现有的step# 1的密钥存储条目/别名。我真的需要在密钥存储1中使用虚拟的自签名证书吗?谢谢!

EN

回答 2

Security用户

回答已采纳

发布于 2018-11-07 03:43:17

您需要在发送证书请求之前生成密钥对,因为该证书请求包含公钥并使用私钥签名。因此,在CSR之后生成一个新的密钥对是不可能的,因为您将获得与返回证书中的公钥不同的公钥,因此私钥将与证书中的公钥不匹配。

Java处理私钥的方法非常依赖于TLS和X.509 / PKIX。这意味着私钥的存在需要绑定到证书链和别名。正因为如此,私钥由一个只包含CSR中的信息的自签名证书生成。直到最近,Java才开始采用一种更灵活的方法来处理密钥存储--它还将默认情况转换为PKCS#12密钥存储。

私钥与证书链的联系是Java的一个设计决策--我不知道为什么,我想这是为了简化事情。

票数 1
EN

Security用户

发布于 2018-11-06 23:06:04

CSR的证书是密钥对的公钥加上一些元数据。您实际上是在要求受信任的公钥基础结构的成员“担保”您的公钥来自您。一旦元数据被权威机构验证,它们将向您颁发一个证书,其中包含由授权机构签名的公钥。

获得签名证书后,按照Oracle文档将其与现有密钥对:https://docs.oracle.com/cd/E19509-01/820-3503/ggezu/index.html合并到密钥存储库中。这将用颁发证书颁发机构的签名版本覆盖存储区中未签名的公钥。(谢谢马腾·鲍德斯)

权威机构正在对你原来的密钥对的一半公开签名,因为它来自你。如果您生成一个新的密钥对并覆盖您的别名,那么您将有效地写入与您的(现在有效的)证书相关联的私钥。

票数 1
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/197054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档