我有一个在互联网上公开的 HAProxy 服务器。我使用子域名(例如 registry.mydomain.com)创建 letsencrypt 证书,从而实现加密连接。
现在,我想使用 HAProxy 将来自该 URL 的流量转发到其他计算机上的某个 docker swarm。在该 swarm 中,我运行了一个 Docker Registry,它反过来要求提供这样的加密证书。
我尝试重复使用从 HAProxy 获得的信息。不幸的是,当流量通过 HAProxy 进入 Docker Registry 容器时,我收到了以下错误消息:
守护进程的错误响应:获取https://[swarm-ip]:5000/v1/users/:x509:无法验证 [swarm-ip] 的证书,因为它不包含任何 IP SAN
作为一名尝试进行网络工作的程序员,我觉得这里缺少了一些东西,但我就是无法弄清楚。
答案1
使用您的 letsencrypt 证书,CN(registry.mydomain.com)将与您尝试访问的 URL([swarm-ip])不匹配。
为您提供两种解决方案,您可以创建自己的解决方案加州生成您自己的证书,并在您的 haproxy 上信任它。
或者,你可以告诉 haproxy 不要验证证书:
server myserver [swarm-ip]:5000 ssl verify none
这样,您的 haproxy 和后端之间的流量仍将被加密,但它不会检查证书是否有效。这意味着您仍然可能受到中间人。
如果您决定告诉您的 haproxy 不要检查您的证书,您可以使用任何您想要的证书,甚至是自签名的证书。