如何将JKS转换为Docker Registry cert / key?

我正在尝试在两个虚拟机(HA)上build立一个安全的Docker Registry ,并对设置SSL有疑问。 根据文档中的链接,我需要一个有两个文件的certs目录:

  • registry.crt – CA证书
  • registry.key – ??? (私钥?)

我已经得到了一个Java JKS(密钥库),其中包含一个可用于这些VM的通配符CA证书。 我能够成功地从密钥库中导出证书,如下所示:

 keytool -export -alias certalias -file registry.crt -keystore mycerts.jks 

到目前为止这么好:我有registry.crt 。 然而,一些相关的问题/担忧阻止我完成这个设置:

  • 什么是*.key文件,它与cert有什么不同,以及如何从JKS中提取它?
  • Docker / Registry在哪里期望在每个虚拟机上的这个certs目录? 也许/home/myuser/ 这个位置是可configuration的吗?!?
  • 正如链接所解释的,如果您的CA证书是“ 中介 ”证书,则需要采取特殊的附加措施。 我怎么知道我的证书是否中介?

这里真的有三个问题。 你可能应该提出不同的问题。 我不知道你的第二个答案,但会回答其他两个。


简单来说,在SSL的情况下,客户端使用证书中包含的公钥来启动安全连接。 只有拥有相应(私有)密钥的服务器才能应答并因此build立连接。 (还有很多事情要做。)

关于这个keystore的简短描述是:帮你一个忙,使用一个像KeyStore Explorer这样的工具。 没有从属关系,我只是喜欢这个工具。 用keytool导出私钥并不那么简单。 据我所知,你不能直接导出私钥。 但是,您可以导出到PKCS12并使用其他工具,如OpenSSL :

keytool -importkeystore -srckeystore existing-store.jks -destkeystore new-store.p12 -deststoretype PKCS12

如果您只有一个自签名证书(签名者与主题相同),则不必担心中介人。 中间证书意味着由签名您的证书的CA签名的证书本身由另一个CA签名。

 CA 0 (signed by CA 0) - well known certificate, self-signed \_ CA 1 (signed by CA 0) - intermediate certificate \_ Your Cert (signed by CA 1) 

为了validation你的证书的完整性,整个链条必须被客户知道。 通常,只有顶部的CA分布在浏览器和操作系统(CA 0)中,所以您需要在“中间”(CA 1)之间发布证书。

Interesting Posts