从证书、中间证书和私钥创建密钥库 [重复]

Posted

技术标签:

【中文标题】从证书、中间证书和私钥创建密钥库 [重复]【英文标题】:Creating a keystore from certificate, intermediate certificate and private key [duplicate] 【发布时间】:2017-02-05 00:58:59 【问题描述】:

在给定工作集 1.a certificate.cer、2.一个 middle.cer 和 3.一个私钥。

可以使用这三个文件中的相同配置一个 apache2 httpd,在 ssl.conf 中使用以下配置(路径省略):

<VirtualHost>
  ...

  SSLCertificateFile   certificate.cer
  SSLCertificateKeyFile   privatekey.key
  SSLCertificateChainFile   intermediate.cer

  ...
</VirtualHost>

浏览器毫无怨言地接受了 https 连接。

然后我切换到java ...

基于 java 的 vert.x 3 服务器至少需要一个 java keystore 文件和一个密码:

new HttpServerOptions()
.setSsl(true)
.setKeyStoreOptions( 
  new JksOptions()
  .setPath("keystore.jks")
  .setPassword("...")
  )
);

我说:......它“至少”需要一个密钥库和一个密码,因为它可能需要更多......

浏览器告诉我:

www.mydomain.com uses an invalid security certificate. 
The certificate is not trusted because the issuer certificate 
is unknown. The server might not be sending the appropriate 
intermediate certificates. 
An additional root certificate may need to be imported. 
Error code: SEC_ERROR_UNKNOWN_ISSUER 

www.mydomain.com 是正确的,令人惊讶的是,浏览器显示的有关证书的所有信息都与我使用上面的 apache2 httpd 时相同。

请展示将上述三个给定文件转换为 java 密钥库以解决问题的完整过程,即请展示一个工作脚本(使用 ubuntu / linux 标准工具,如 java 的 keytool 和 openssl)。

学习如何使用这些工具测试结果的正确性也将是一种更大的乐趣。

这个问题不是重复的,原因有几个——我给个提示:

首先,我在这里询问 apache2 httpd 和基于 java 的 vertx 3 服务器的配置之间的区别。

其次,我问的是如何将 3 个或更多组件组合成一个完整的 java 密钥库。 Httpd 可以访问必要的第四个组件并隐式获取它。 java服务器不这样做。缺少的组件必须明确包含在密钥库中。因此,答案必须显示如何准确找到所需的组件(证书)并包含它们。

之前在本论坛中给出的答案并未涉及该问题的核心(以及其他不太重要的)方面。不太重要的是版本、证书类型和结果测试。作为进一步的提示,可能根本没有可靠的方法来测试安全性 - 这真的很遗憾,但我无能为力。

这个问题的一个重要特征是我要求的是针对该问题的特定答案——而不是其他任何东西。

【问题讨论】:

Google for Java keytool(JDK 的一部分)。我更喜欢 Portecle,它是一个开源 UI 密钥库编辑器。只需将文件导出到您的桌面系统,合并它们,然后复制回服务器。 问题是询问确切的程序 - 不是针对个人喜好的谷歌链接。 @Omikron 和罗伯特:我的问题与任何一个都不重复。这就是您阅读问题时所看到的。 也许我们比你更了解这个话题。仔细阅读投票率最高的答案(和 cmets),它解释了你做错了什么。 【参考方案1】:

我不知道这是否有帮助,但您可以使用工具 KeyStore Explorer 5.2 并以更图形化的方式随意导入/导出/合并密钥和存储,它几乎提供了您需要的所有操作。如果你想要一个脚本,那么......只需检查 keytool “API”。

【讨论】:

问题是询问确切的程序 - 不是为了提供一种通用工具来做任何事情 - 顺便说一句“导入/导出/合并密钥和存储,如你所愿" [引用]。 正如我所说,“我不知道它是否有帮助”,我想也许你想合并密钥以进行测试;一个简单的“谢谢,但这对我没有帮助”就足够了,而不是 2 cmets;祝你好运!

以上是关于从证书、中间证书和私钥创建密钥库 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

从 .pfx 文件中提取证书和私钥文件

如何从自签名证书的密钥库中导出私钥

使用openssl命令从.p12文件中提取证书和私钥。

证书与私钥匹配

公钥,私钥,证书

jdk生成CA证书