【发布时间】: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),它解释了你做错了什么。
标签: java apache ssl https keystore