如何将JKS转换为Docker注册证书/密钥



我试图在两个虚拟机上(用于HA)设置一个安全的Docker注册表,并对设置SSL有一个问题。根据文档中的链接,我需要有一个certs目录,其中包含两个文件:

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

我已经得到了一个Java JKS(密钥库),其中包含一个通配符CA证书,将为这些vm工作。我能够成功地从密钥存储库中导出证书,如下所示:

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

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

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

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


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

关于密钥存储库的简短说明是:帮自己一个忙,使用像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)

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

最新更新