我试图在两个虚拟机上(用于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)。