繁体   English   中英

关于证书签名过程的java问题

[英]java question on certificates signing process

我很困惑在java中创建由CA签名的有效证书的过程。
我知道java有工具keytool来创建公钥和证书。
它还支持JKS和PKCS#12。
因此,可以创建具有公钥 - 私钥对和证书的密钥库,例如
keytool -genkey -keyalg RSA -alias aCert -keystore someKeystore.keystore这将创建一个带有证书的密钥库(自签名)。
到目前为止我明白了。
我可以导出证书以获取csr请求以发送给CA,例如Verisign,当然没有私钥。
在这部分之后我迷失了。
CA会签名,我将不得不重新导入我的密钥库?这将取代密钥库中已有的原始证书?
它仍将是自签名的。
发行人不应该是CA本身吗?但那么这怎么可能呢?我只发送公钥而不是证书?
有关清理流程的任何帮助吗?
更新
CA是否签署证书(例如Verisign)也是发行人?或者它可以签署证书, issuer==subject
谢谢

你是正确的CSR创建点。 你会用这样的东西:

$ keytool -certreq -alias myalias -file myalias.csr -keystore keystore

生成CSR,其中包含:

  • 您的公钥(从自签名证书中提取)
  • 专有名称(即要求证书的实体名称)

并使用您的私钥签名。 然后,CA生成一个新证书:

  • subject =您的DN(来自CSR或使用您在申请过程中提供的详细信息自动生成)
  • issuer = CA的DN
  • 公钥=来自CSR

您需要导入到密钥库中, 替换原始的自签名证书:

$ keytool -import -alias myalias -keystore keystore -file myalias.crt

CA通常会使用中间证书对您的新证书进行签名,而中间证书又由受信任的根签名; 在这种情况下,您应该在您自己的证书之前导入中间证书:

$ keytool -import -trustcacerts -alias intermediate -file intermediate.crt -keystore keystore

编辑:来自keytool文档的这个模糊部分非常清楚(它谈论了一个'链'证书,这只是指将你的链接到根的中间证书):

keytool可以创建和管理密钥库“密钥”条目,每个条目包含一个私钥和一个关联的证书“链”。 链中的第一个证书包含与私钥对应的公钥。

首次生成密钥时(请参阅-genkey子命令),链开始时包含单个元素,即自签名证书。 自签名证书是发行者(签名者)与主题相同的证书(证书对其公钥进行身份验证的实体)。 每当调用-genkey子命令生成新的公钥/私钥对时,它还会将公钥包装到自签名证书中。

稍后,在生成证书签名请求(CSR)(请参阅-certreq子命令)并发送到证书颁发机构(CA)后,将导入CA的响应(请参阅-import),并且自签名证书为取而代之的是一系列证书。 链的底部是CA颁发的证书(回复),用于验证主题的公钥。 链中的下一个证书是验证CA的公钥的证书。

在CA签署证书后,它不再是自签名的。 自签名证书具有issuer == subject。 当CA签署它时,颁发者成为CA,CA对应于CA自己的证书中的主题,而该证书又由另一个发行者签名,...因此您有一个证书链,终止于已经受信任的根在你的信任库里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM