导入证书或链
只想问这个问题的“澄清”,而不是一个分辨率时,密钥工具命令:导入证书或链
Java的密钥工具与-trustcacerts
ARG的-importcert
命令。从官方的帮助指南。
导入来自CA
该认证答复后您导入认证的 您提交证书签名请求(该CA的公钥证书或有 已经这样一个证书cacerts文件),您可以导入 证书回复,并将您的自签名证书替换为 证书链。此链是构成由CA在 响应返回到您的请求的一个(当CA答复是链),或一种 (当CA答复是单个证书)使用已经在 认证答复和受信任的证书在您导入答复的密钥库中或在cacerts密钥库 文件中可用 。
例如,如果您发送您的证书签名请求,威瑞信, 那么你可以导入使用以下的答复,这假设 返回的证书名为VSMarkJ.cer:
keytool -importcert -trustcacerts -file VSMarkJ.cer
我也看了跟随着从keytool
文档:
如果回答是一个X.509证书,密钥工具学尝试ts到 建立信任链,从证书回复开始,并在自签名证书(属于根CA)结束 。证书 回复和用于认证 证书回复的证书层次结构形成了新的证书链别名。如果不能建立信任链,则不会导入证书回复。在 这种情况下,密钥工具不打印出证书并提示 用户进行验证,因为它是非常硬的(如果不是不可能的),用于一个用户 以确定证书的回复的真实性。
如果答复是PKCS#7格式的证书链,该链是第一 排序(与用户证书第一和自签名的根CA 证书最后一个),前密钥工具试图根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
与
# 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
对不起,任何不正确的假设,只是想与他人:)
问候合作,理解,
# 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
选项,或者在相应的提示符下输入'yes'。
#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时使用的密钥库文件和别名。这是错误的常见来源。
当你尝试时发生了什么?如果你只有一个文件回复,#1和#3可能如何相关?他们都使用两个文件。 – EJP
@EJP好吧我错过了一个改变 - 现在更新了问题。谢谢。我的信任库cacerts受到了损坏(我认为),因为我在服务器密钥库和信任库中使用了“-trustcacerts”。只是想了解如何不搞乱顺序。我使用'openssl s_client'命令来检查服务器在打印出大量证书信息时的行为,但没有实际的数据写入/读取测试。 – ha9u63ar