2016-09-27 319 views
-1

我如何可以配置(基于Java)vert.x给予工作集1. certificate.cer 3服务器提供HTTPS(在Ubuntu的云服务器环境) ,2.一个intermediate.cer,以及3.一个私钥。 (路径略)创建从证书,中级证书和私有密钥库密钥

的apache2的httpd的可成功地使用相同的这三个文件的与ssl.conf中以下配置构造:

<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)。

这也将是一个更大的乐趣,学习如何使用这些工具来测试correctnes结果。

这个问题是不是有几个原因重复 - 我给一个提示:

首先,我在这里要求的的Apache2的httpd的配置和基于Java vertx 3服务器之间的差异。

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

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

问题的一个重要特征是,我要求的特定于该问题的答案 - 不是别的。

+0

Google for Java'keytool'(JDK的一部分)。我更喜欢Portecle,它是一个开源的UI密钥库编辑器。只需将文件导出到桌面系统,将它们合并,然后复制回服务器。 – Robert

+1

问题是要求确切的程序 - 不适用于个人偏好的谷歌链接。 – Michael

+0

@Omikron和Robert:我的问题不是任何一个的重复。这就是你看到的问题。 – Michael

回答

0

我不知道这是否可以帮助,但你可以使用该工具的KeyStore浏览器5.2和导入/导出/合并键和商店,你会更图形化的方式一样,它几乎让你需要的所有操作。如果你想要一个脚本,那么......只需检查keytool“API”。

+0

我假定在无头服务器环境中工作,并且希望避免安装不属于发行版的软件 - 特别是在涉及安全性时。 – Michael

+0

问题是要求确切的程序 - 不是为了提供一种方法来执行任何操作的通用工具的存在 - 顺便说一句,“导入/导出/合并密钥和商店,如你所愿”[引用]。 – Michael

+1

正如我所说的,“我不知道它是否有帮助”,我想也许你想合并键为测试目的例如;一个简单的“谢谢,但这不会帮助我”就足够了,而不是2条评论;祝你好运 ! –