我正在尝试根据https://docs.docker.com/registry/deploying/#running-a-domain-registry的文档设置一个私有 docker 注册表。
我使用 StartSSL 作为证书颁发者,下载了他们的中间 crt 并将它们与我的客户端证书结合起来:
cd certs
cat sca.server3.crt ca.crt client.pem > client.crt
启动注册表后
docker run --rm -p 5000:5000 --name registry -v `pwd`/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/client.crt -e REGISTRY_HTTP_TLS_KEY=/certs/private.key registry:2
注册表抱怨私钥/公钥不匹配。但是,相同的证书 + 私钥在其他一些 Apache 站点中也可以使用。在将中间 crt 添加到 client.crt 之前,我没有收到该错误
time="2016-07-18T11:34:19Z" level=fatal msg="crypto/tls: private key does not match public key"
由于注册表在 Intranet(不是公共 Internet)中运行,我不想设置 apache/nginx 只是为了充当代理。
旁注:我正在使用 Docker Mac(Docker 版本 1.12.0-rc4,构建 e4a0dbc,实验性)。
我记得如何组合证书的顺序很重要。
尝试自下而上的方法:
cat domain.crt intermediate-certificates.pem ca.pem > chained-domain.crt