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

时间:2015-09-18 20:01:04

标签: java ssl docker keystore private-key

我正在尝试set up a secure Docker Registry在两个虚拟机上(对于HA)并且有关于设置SSL的问题。根据文档中的链接,我需要有一个certs目录,其中包含两个文件:

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

我获得了一个Java JKS(密钥库),其中包含一个适用于这些虚拟机的通配符CA证书。我能够成功地将证书从密钥库中导出,如下所示:

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

到目前为止很好:我有registry.crt。但是,一些相关问题/疑虑使我无法完成此设置:

  • 什么是*.key文件,它与证书有何不同,我如何从JKS中提取它?
  • Docker / Registry在每个VM上期望这个certs目录在哪里?也许/home/myuser/?此位置是否可配置?!
  • 如链接所述,如果您的CA证书是“中介”证书,则需要执行特殊的附加操作。如何判断我的证书是否属于中间人?

1 个答案:

答案 0 :(得分:2)

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

简单来说,在SSL的上下文中,客户端使用证书中包含的公钥启动安全连接。只有拥有相应(私有)密钥的服务器才能应答,从而建立连接。 (还有很多事情要发生。)

关于密钥库的简短说明是:帮自己一个忙,并使用像KeyStore Explorer这样的工具。没有隶属关系,我只是喜欢这个工具。使用keytool导出私钥并不那么简单。据我所知,你无法直接导出私钥。 You can however export to PKCS12 and use other tools like OpenSSL from there

  

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)

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