我正在尝试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中提取它? certs
目录在哪里?也许/home/myuser/
?此位置是否可配置?! 答案 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)之间发布证书。