Ssl 使用certbot/lets加密DNS负载平衡?

Ssl 使用certbot/lets加密DNS负载平衡?,ssl,ssl-certificate,digital-ocean,lets-encrypt,certbot,Ssl,Ssl Certificate,Digital Ocean,Lets Encrypt,Certbot,我正在为我的网站创建多个水滴(按负载缩放),因此我的DNS看起来像这样: www.somesite.com A 1.2.3.4 www.somesite.com A 6.7.8.9 甚至可以为多个IP获取同一域的证书吗 我正在使用certbot--apache--email=admin@domain-d www.domain安装我的证书,但第二次安装后失败 另外,我知道DO提供了一个负载平衡器,但我现在不能使用它,因为您无法预测letsencrypt请求将到达的服务器,所以

我正在为我的网站创建多个水滴(按负载缩放),因此我的DNS看起来像这样:

www.somesite.com   A    1.2.3.4
www.somesite.com   A    6.7.8.9
甚至可以为多个IP获取同一域的证书吗

我正在使用
certbot--apache--email=admin@domain-d www.domain
安装我的证书,但第二次安装后失败


另外,我知道DO提供了一个负载平衡器,但我现在不能使用它,因为您无法预测letsencrypt请求将到达的服务器,所以挑战
tls-sni-01
http-01
将无法工作

您可以在一台服务器上使用DNS质询,然后在另一台服务器上rsync生成的证书


使用certbot,您可以使用命令行
--首选挑战dns
,然后将TXT条目添加到域中。

这听起来像是certbot的限制。想必你有办法将你的站点部署到多个IP上;现在使用相同的方法将挑战部署到这些多个IP。花一个小时也没关系,乐是有耐心的。我不知道certbot是否能在这方面帮助您,但还有很多其他的让我们加密客户端


正如另一个答案所说,dns-01在这里最简单,假设您可以自动更改dns。

假设您在负载平衡器
a
b
后面有两台服务器,并且服务器终止SSL

假设服务器正在运行NGINX,它支持将请求代理到另一台服务器(我想Apache也可以处理这个问题,但无法确认)

假设您不控制服务器所服务的域的DNS(可能您正在运行SaaS并允许用户在您的服务上使用他们自己的域)

以下是我们在at实现这一目标的步骤

步骤1。
a
上安装
certbot

步骤2。
b
上配置NGINX以代理让我们将验证请求加密到
a

下面的设置使用了,因此我们需要打开
a

服务器{
监听80个proxy_协议;
监听443代理_协议ssl;
服务器名称example.com www.example.com;
...
位置^ ~/。著名的/acme挑战赛{
代理通行证http://a.example.com:8080;
}
...
ssl_certificate/etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key/etc/letsencrypt/live/example.com/privkey.pem;
}
第3步。使用插件获取证书(使用apache插件可能可以实现此操作,但我建议在负载平衡器后面的复杂设置中使用较少的自动化)

certbot-d example.com-d www.example.com--webroot--webroot路径/path/to/public/folder certonly
步骤4。使用
rsync
作为根用户将证书同步到
b

#/bin/bash
如果[“$(id-u)”!=“0”];然后
echo“此脚本必须以root用户身份运行”
出口1
fi
declare-a files=(“/etc/letsencrypt/live”“/etc/nginx/nginx.conf”“/etc/nginx/sites available”)
对于“${files[@]}”中的文件;做
rsync-axLS--删除$fileadmin@b.example.com:同步
完成
回音“完成”
步骤5。使用
rsync
作为根用户在
b
上应用证书

#/bin/bash
如果[“$(id-u)”!=“0”];然后
echo“此脚本必须以root用户身份运行”
出口1
fi
data=“/home/admin/sync”
如果[!-d$数据];然后
回显“$data文件夹未找到”
出口1
fi
rsync-axS--删除$data/live//etc/letsencrypt/live
rsync-axS——删除$data/nginx.conf/etc/nginx/nginx.conf
rsync-axS--删除$data/sites available//etc/nginx/sites available
chown-R root:root/etc/letsencrypt/live
chown-R root:root/etc/nginx/nginx.conf
chown-R root:root/etc/nginx/sites可用
如果nginx-ensites.sh;然后
rm-r$数据
回音“完成”
fi
步骤6。通过创建指向
已启用站点的符号链接,在
可用站点中启用站点

#/bin/bash
如果[“$(id-u)”!=“0”];然后
echo“此脚本必须以root用户身份运行”
出口1
fi
nginx=/usr/sbin/nginx
rm/etc/nginx/已启用站点/*
文件=(/etc/nginx/sites available/*)
对于“${files[@]}”中的文件
做
src=../sites available/${file}
dest=/etc/nginx/sites enabled/${file}
如果[!-f$dest];然后
ln-s$src$dest
fi
完成
如果$nginx-t;然后
$nginx-s重新加载
echo“所有可用站点均已启用”
fi

第7步。使用cron作业尝试每月更新一次。

我想没有直接的方法。我担心最终的解决方案可能需要做这类工作和复制证书。感谢您将这一切放在一起并共享实现!这是一个很好的答案!