导入证书或链

时间:2017-08-05 13:17:53

标签: java certificate keystore keytool ca

只是想问这个问题" Clarification"而不是决议:

java keytool具有带-importcert arg的-trustcacerts命令。从官方帮助指南。

  

从CA导入证书回复

     

导入验证公钥的证书后   您提交证书签名请求的CA(或者有   已经在cacerts文件中的这样的证书),你可以导入   证书回复并用a替换你的自签名证书   证书链。这个链是CA返回的链   响应您的请求(当CA回复是链接时)或一个   构建(当CA回复是单个证书时)使用   证书回复和已经可用的受信任证书   在导入回复的密钥库中或在cacerts密钥库中   文件。

     

例如,如果您将证书签名请求发送给VeriSign,   那么您可以使用以下内容导入回复,该假设是   返回的证书名为VSMarkJ.cer:

     

keytool -importcert -trustcacerts -file VSMarkJ.cer

我还阅读了keytool文档中的以下内容:

  

如果回复是单个X.509证书,则keytool会尝试   建立信任链,从证书回复和结束开始   在自签名证书(属于根CA)。证书   回复和用于验证的证书的层次结构   证书回复形成别名的新证书链。如果是信任   链不能建立,证书回复不导入。在   在这种情况下,keytool不会打印出证书并提示   用户验证它,因为它很难(如果不是不可能的话)   用户确定证书回复的真实性。

     

如果回复是PKCS#7格式的证书链,则链是第一个   ordered(首先使用用户证书和自签名根CA.   证书最后),在keytool尝试匹配根CA之前   在回复中提供的证书与任何可信证书   在密钥库或" cacerts"密钥库文件(如果-trustcacerts   选项已指定)。如果找不到匹配项,则信息为   打印出根CA证书,并提示用户   例如,通过比较显示的证书指纹来验证它   使用从其他(可信)来源获得的指纹   信息,可能是根CA本身。然后用户拥有   中止导入操作的选项。如果-noprompt选项是   但是,如果给定,则不会与用户进行交互。

如果我收到带有根CA和我的签名证书的证书回复,那么哪一个是正确导入证书的正确命令(或者以下所有工作都基于根CA可用性):

# Assuming doesn't exist at all
keytool -import -keystore server_keystore.jks -storepass pass -alias rootCA -file ca-cert-file
keytool -import -keystore server_keystore.jks -storepass pass -alias fqdn_name -file signed_server_cert

VS

#Assuming that root CA exists in system-wide cacerts
keytool -import -trustcacerts -keystore server_keystore.jks -storepass pass -alias fqdn_name -file signed_server_cert

VS

# Assuming that the root CA doesn't exist
keytool -importcert -keystore java_home\jre\lib\security\cacerts -storepass changeit -alias someRootCA -file root_ca_cert
keytool -importcert -trustcacerts -keystore server_keystore.jks -storepass pass -alias fqdn_name -file signed_server_cert

对于任何不正确的假设感到抱歉,只是试图通过与他人合作来理解:)

此致

1 个答案:

答案 0 :(得分:2)

# Assuming doesn't exist at all
keytool -import -keystore server_keystore.jks -storepass pass -alias rootCA -file ca-cert-file
keytool -import -keystore server_keystore.jks -storepass pass -alias fqdn_name -file signed_server_cert

这是使用的。您需要在第一个选项上使用-trustcacerts选项,或在相应的提示符上回答“是”。

#Assuming that root CA exists in system-wide cacerts
keytool -import -trustcacerts -keystore server_keystore.jks -storepass pass -alias fqdn_name -file signed_server_cert

如果您签署的证书位于cacerts 通常情况并非如此:根证书应该在那里,但可能是他们使用的证书签署了三个或更多的证书。

# Assuming that the root CA is a new authority
keytool -importcert -keystore java_home\jre\lib\security\cacerts -storepass changeit -alias someRootCA -file root_ca_cert
keytool -importcert -trustcacerts -keystore server_keystore.jks -storepass pass -alias fqdn_name -file signed_server_cert

理论上看起来还不错,但如果CA是一个新的权威机构,那么其他任何人都不会相信它,所以这是徒劳的。

请注意,导入签名证书时,必须使用生成密钥对和CSR时使用的相同密钥库文件和别名。这是一个常见的错误来源。