从证书,中间证书和私钥创建密钥库

时间:2016-09-27 11:50:10

标签: java apache ssl https keystore

如何配置(基于java)vert.x 3服务器以服务https(在ubuntu云服务器环境中),给定工作集1. certificate.cer,2。intermediate.cer和3。私钥。

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

<VirtualHost>
  ...

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

  ...
</VirtualHost>

浏览器接受了https连接而没有投诉。

然后我切换到了java ...

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

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服务器不这样做。缺少的组件必须明确地包含在密钥库中。因此,答案必须说明如何准确找到所需的组件(证书)并包含它们。

此论坛之前给出的答案并没有解决这个问题的核心(以及其他不那么重要的)方面。不太重要的是版本,证书类型和结果测试。作为进一步的暗示,可能根本没有可靠的方法来测试安全性 - 这真的很可惜但是我无法帮助它。

问题的一个重要特征是我要求特定于该问题的答案 - 而不是其他任何问题。

1 个答案:

答案 0 :(得分:0)

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