【发布时间】:2020-11-12 11:18:57
【问题描述】:
我的客户从 Go-Daddy 向我发送了三个文件(86f8ac00fcd77994.crt、86f8ac00fcd77994.pem 和 gd_bundle-g2-g1.crt)。我需要从这些文件中创建一个 jks 密钥库。是否可以?谢谢!
PD:对不起我的英语!
【问题讨论】:
标签: ssl ssl-certificate keystore jks
我的客户从 Go-Daddy 向我发送了三个文件(86f8ac00fcd77994.crt、86f8ac00fcd77994.pem 和 gd_bundle-g2-g1.crt)。我需要从这些文件中创建一个 jks 密钥库。是否可以?谢谢!
PD:对不起我的英语!
【问题讨论】:
标签: ssl ssl-certificate keystore jks
可以,但您不想这样做。
Java 使用 JKS 之类的密钥库文件和内存中的 KeyStore 对象来存储 two (or three) different kinds of information,但许多人不准确地称它们为证书,并且不理解巨大而关键的区别。具体来说(并从 javadoc 更改顺序):
TrustedCertificate 条目包含“[一个] 证书......属于另一方。......这种类型的条目可用于验证其他方。”
一个 PrivateKey 条目包含一个私钥加上一个“由给定实体用于自我认证”的证书链。
为了完整起见,一些密钥库可以包含 SecretKey 条目,但 JKS 不能,即使对于那些可以的,也很少使用此功能。
您拥有的文件都是证书(一个在十六进制文件中,几个在捆绑文件中),而不是私钥。您可以将它们中的每一个导入到 TrustedCert 条目中,但 TrustedCert 条目仅用于验证通信的另一端——即,当您连接到服务器时,TrustedCert 条目用于验证服务器的证书,并且如果您接受来自客户端的连接并请求客户端身份验证(这不是默认设置并且很少见),则 TrustedCert 条目用于验证该客户端的证书。但是由于此证书是由 GoDaddy 颁发的,如果它被您与之通信的服务器或客户端正确使用(及其链),您不需要任何 TrustedCert 条目,因为它已经针对根进行验证在 Java 的默认信任库中。
如果您想使用此证书来验证“您自己”(即您的系统)——例如,如果您想运行 TLS 服务器(可能但不一定是 HTTPS web 服务器) 由该证书标识 - 您需要 PrivateKey 条目,而不是任何 TrustedCert 条目,并且您无法创建 PrivateKey 条目,因为您没有私钥。从 GoDaddy 获得此证书的人确实拥有私钥,因为证书请求过程需要它,所以 他们 可以例如运行服务器,但他们没有给你,所以你不能。
因此,对于您提出的问题(您能否将这些证书放入 JKS 中)的答案是肯定的,您可以。但这完全是浪费时间,因为生成的 JKS 不能用于任何事情,而且毫无价值。
【讨论】: