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

Cra*_*lus 3 java security digital-certificate digital-signature x509certificate

我很困惑在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吗?
谢谢

Sim*_*onJ 6

你是正确的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的公钥的证书.