如何将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)之间发布证书。